当前位置:   article > 正文

RxJava_rxjava依赖

rxjava依赖

目录

1 RxJAVA简介

1 什么是RxJava

2.RxJava好在哪

3.什么是观察者模式?

4.RxJava原理理解

5.实例

2.Retrofit+OkHTTP+RxJava+RecycleView的实现步骤

第一步:创建项目

第二步:导入依赖

第三步:添加网络权限

第四步:在activity_main.xml添加Recycle,并给其设置id

第五步:创建子布局

第六步:创建实体类

第七步:创建适配器

第八步:设置适配器

第九步:进行网络请求


1 RxJAVA简介

1 什么是RxJava

        我对它的定义是:RxJava 本质上是一个异步操作库,是一个能让你用极其简洁的逻辑去处理繁琐复杂任务的异步事件库。

2.RxJava好在哪

        Android平台上为已经开发者提供了 AsyncTask,Handler 等用来做异步操作的类库,那我们为什么还要选 择RxJava 呢?答案是简洁! RxJava 可以用非常简洁的代码逻辑来解决复杂问题;而且即使业务逻辑的越来越复杂,它依然能够保持简洁!再配合上Lambda 用简单的几行代码分分钟就解决你负责的业务问题。

3.什么是观察者模式?

        举个栗子,Android View 的点击监听器的实现, View 是被观察者, OnClickListener 对象是观察者, Activity要如何知道 View 被点击了?那就是派一个 OnClickListener 对象,入驻 View ,与 View 达成一个订 阅关系,一旦View 被点击了,就通过 OnClickListener 对象的 OnClick 方法传达给 Activity 。采用观察者模式可以避免去轮询检查,节约有限的cpu 资源。

4.RxJava原理理解

        被观察者通过订阅将事件按顺序依次传递给观察者 

5.实例

1. 建立被观察者 Observable & 生产事件
2. 建立观察者 Observer 并 定义响应事件的行为
3. 经过订阅 Subscribe 链接观察者和被观察者
  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. //建立观察者 向被观察者发送消息
  7. Observable observable=Observable.create(new ObservableOnSubscribe<Object>() {
  8. @Override
  9. public void subscribe(ObservableEmitter<Object> emitter) throws Exception {
  10. emitter.onNext(1);
  11. emitter.onNext(2);
  12. emitter.onNext(3);
  13. emitter.onComplete();
  14. }
  15. });
  16. //建立被观察者 接收观察者的消息进行处理
  17. Observer observer=new Observer() {
  18. @Override
  19. public void onSubscribe(Disposable d) {
  20. Log.i("onSubscribe","开始连接");
  21. }
  22. @Override
  23. public void onNext(Object o) {
  24. Log.i("onNext","接收到的值是"+o);
  25. }
  26. @Override
  27. public void onError(Throwable e) {
  28. Log.i("onError","失败");
  29. }
  30. @Override
  31. public void onComplete() {
  32. Log.i("onComplete","完成");
  33. }
  34. };
  35. //被观察者向观察者进行订阅
  36. observable.subscribe(observer);
  37. }
  38. }

2.Retrofit+OkHTTP+RxJava+RecycleView的实现步骤

第一步:创建项目

第二步:导入依赖

  1. //for rxjava
  2. implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
  3. //for rxandroid
  4. implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
  5. //衔接 Retrofit & RxJava,此处一定要注意使用RxJava2的版本
  6. implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
  7. //添加Retrofit依赖
  8. implementation 'com.squareup.retrofit2:retrofit:2.5.0'
  9. //添加Gson解析
  10. implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
  11. //添加图片加载库依赖
  12. implementation 'com.github.bumptech.glide:glide:4.12.0'

第三步:添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

第四步:在activity_main.xml添加Recycle,并给其设置id

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".MainActivity2"
  8. android:padding="15dp"
  9. android:orientation="vertical">
  10. <androidx.recyclerview.widget.RecyclerView
  11. android:id="@+id/rv_news"
  12. android:layout_width="match_parent"
  13. android:layout_height="match_parent" />
  14. </LinearLayout>

第五步:创建子布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="150dp"
  5. xmlns:app="http://schemas.android.com/apk/res-auto"
  6. app:cardElevation="5dp"
  7. app:cardCornerRadius="5dp"
  8. android:layout_marginTop="10dp">
  9. <RelativeLayout
  10. android:layout_width="match_parent"
  11. android:layout_height="140dp"
  12. android:layout_margin="5dp">
  13. <ImageView
  14. android:id="@+id/news_pic"
  15. android:scaleType="fitXY"
  16. android:layout_width="140dp"
  17. android:layout_height="140dp"
  18. app:srcCompat="@drawable/ic_launcher_background" />
  19. <TextView
  20. android:id="@+id/news_title"
  21. android:layout_toRightOf="@+id/news_pic"
  22. android:layout_marginStart="20dp"
  23. android:textSize="16sp"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:text="TextView" />
  27. <TextView
  28. android:id="@+id/news_desc"
  29. android:layout_marginTop="20dp"
  30. android:layout_alignLeft="@+id/news_title"
  31. android:layout_below="@+id/news_title"
  32. android:layout_width="wrap_content"
  33. android:layout_height="wrap_content"
  34. android:text="TextView" />
  35. </RelativeLayout>
  36. </androidx.cardview.widget.CardView>

第六步:创建实体类

  1. package com.hopu.day23_rxjava.model;
  2. import java.util.List;
  3. public class News {
  4. private boolean success;
  5. private String title;
  6. private String subtitle;
  7. private String update_time;
  8. private List<Data> data;
  9. public void setSuccess(boolean success) {
  10. this.success = success;
  11. }
  12. public boolean getSuccess() {
  13. return success;
  14. }
  15. public void setTitle(String title) {
  16. this.title = title;
  17. }
  18. public String getTitle() {
  19. return title;
  20. }
  21. public void setSubtitle(String subtitle) {
  22. this.subtitle = subtitle;
  23. }
  24. public String getSubtitle() {
  25. return subtitle;
  26. }
  27. public String getUpdate_time() {
  28. return update_time;
  29. }
  30. public void setUpdate_time(String update_time) {
  31. this.update_time = update_time;
  32. }
  33. public void setData(List<Data> data) {
  34. this.data = data;
  35. }
  36. public List<Data> getData() {
  37. return data;
  38. }
  39. public class Data {
  40. private int index;
  41. private String title;
  42. private String desc;
  43. private String pic;
  44. private String hot;
  45. private String url;
  46. private String mobilUrl;
  47. public void setIndex(int index) {
  48. this.index = index;
  49. }
  50. public int getIndex() {
  51. return index;
  52. }
  53. public void setTitle(String title) {
  54. this.title = title;
  55. }
  56. public String getTitle() {
  57. return title;
  58. }
  59. public void setDesc(String desc) {
  60. this.desc = desc;
  61. }
  62. public String getDesc() {
  63. return desc;
  64. }
  65. public void setPic(String pic) {
  66. this.pic = pic;
  67. }
  68. public String getPic() {
  69. return pic;
  70. }
  71. public void setHot(String hot) {
  72. this.hot = hot;
  73. }
  74. public String getHot() {
  75. return hot;
  76. }
  77. public void setUrl(String url) {
  78. this.url = url;
  79. }
  80. public String getUrl() {
  81. return url;
  82. }
  83. public void setMobilUrl(String mobilUrl) {
  84. this.mobilUrl = mobilUrl;
  85. }
  86. public String getMobilUrl() {
  87. return mobilUrl;
  88. }
  89. }
  90. }

第七步:创建适配器

  1. public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
  2. List<News.Data> list;
  3. public void setResource(List<News.Data> list){
  4. this.list=list;
  5. notifyDataSetChanged();
  6. }
  7. @NonNull
  8. @Override
  9. public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  10. View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item,parent,false);
  11. ViewHolder viewHolder=new ViewHolder(view);
  12. return viewHolder;
  13. }
  14. @Override
  15. public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
  16. News.Data data=list.get(position);
  17. holder.news_title.setText(data.getTitle());
  18. holder.news_desc.setText(data.getDesc());
  19. Glide.with(holder.view).load(data.getPic()).into(holder.news_pic);
  20. }
  21. @Override
  22. public int getItemCount() {
  23. if (list==null){
  24. return 0;
  25. }else {
  26. return list.size();
  27. }
  28. }
  29. public class ViewHolder extends RecyclerView.ViewHolder {
  30. TextView news_title,news_desc;
  31. ImageView news_pic;
  32. View view;
  33. public ViewHolder(@NonNull View itemView) {
  34. super(itemView);
  35. view=itemView;
  36. news_desc=itemView.findViewById(R.id.news_desc);
  37. news_title=itemView.findViewById(R.id.news_title);
  38. news_pic=itemView.findViewById(R.id.news_pic);
  39. }
  40. }
  41. }

第八步:设置适配器

  1. private RecyclerView rv_news;
  2. NewsAdapter newsAdapter;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main2);
  7. rv_news=findViewById(R.id.rv_news);
  8. newsAdapter=new NewsAdapter();
  9. LinearLayoutManager layoutManager=new LinearLayoutManager(MainActivity2.this);
  10. rv_news.setLayoutManager(layoutManager);
  11. rv_news.setAdapter(newsAdapter);
  12. retrofitGet();
  13. }

第九步:进行网络请求

1. 创建请求接口
  1. public interface News_Interface {
  2. @GET("api/hotlist?type=baiduRD")
  3. Observable<News> getNews();
  4. }

2. 开始网络请求

3. 处理返回结果
  1. private void retrofitGet() {
  2. Retrofit retrofit=new Retrofit.Builder()
  3. .baseUrl("https://api.vvhan.com/")
  4. .addConverterFactory(GsonConverterFactory.create())
  5. .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
  6. .build();
  7. News_Interface newsInterface=retrofit.create(News_Interface.class);
  8. Observable<News> observable=newsInterface.getNews();
  9. observable.subscribeOn(Schedulers.io())
  10. .observeOn(AndroidSchedulers.mainThread())
  11. .subscribe(new Observer<News>() {
  12. @Override
  13. public void onSubscribe(Disposable d) {
  14. }
  15. @Override
  16. public void onNext(News news) {
  17. newsAdapter.setResource(news.getData());
  18. }
  19. @Override
  20. public void onError(Throwable e) {
  21. Log.i("onError","连接失败");
  22. }
  23. @Override
  24. public void onComplete() {
  25. }
  26. });

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/300806
推荐阅读
相关标签
  

闽ICP备14008679号