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

RxJava

RXJAVA详细请跳至:
1.什么是RxJava
RxJava 是一种响应式编程,来创建基于事件的异步操作库。基于事件流的链式调用、逻辑清晰简
洁。
RxJava 我的理解是将事件从起点(上游)流向终点(下游),中间有很多卡片对数据进操作并传
递,每个卡片获取上一个卡片传递下来的结果然后对事件进行处理然后将结果传递给下一个卡片,
这样事件就从起点通过卡片一次次传递直到流向终点。
我对它的定义是:RxJava本质上是一个异步操作库,是一个能让你用极其简洁的逻辑去处理繁琐复杂任
务的异步事件库。
什么是观察者模式?
举个栗子,Android中View的点击监听器的实现,View是被观察者,OnClickListener对象是观察者,
Activity要如何知道View被点击了?那就是派一个OnClickListener对象,入驻View,与View达成一个订
阅关系,一旦View被点击了,就通过OnClickListener对象的OnClick方法传达给Activity。采用观察者模
式可以避免去轮询检查,节约有限的cpu资源。

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

实现效果示例:在这里插入图片描述

第一步:创建项目(略)

第二步:导入依赖

//for rxjava 
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
//for rxandroid 
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' 
//衔接 Retrofit & RxJava,此处一定要注意使用RxJava2的版本 
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0' 
//添加Retrofit依赖 
implementation 'com.squareup.retrofit2:retrofit:2.5.0' 
//添加Gson解析 
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
//添加图片加载库依赖 
implementation 'com.github.bumptech.glide:glide:4.12.0'

在这里插入图片描述

第三步:在AndroidMainfest.xml中添加网络权限

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

在这里插入图片描述

第四步:在activity_main.xml文件中添加RecycleView,并设置ID

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:padding="10dp"
    >
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_img"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

示例:在这里插入图片描述

第五步:创建子布局

news_item.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    app:cardElevation="5dp"
    app:cardCornerRadius="5dp"
    android:padding="5dp"
    android:layout_margin="5dp">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <ImageView
            android:id="@+id/news_pic"
            android:layout_width="150dp"
            android:layout_height="120dp"
            android:layout_alignParentTop="true"
            android:layout_marginStart="9dp"
            android:layout_marginTop="16dp"
            android:scaleType="fitXY"
            app:srcCompat="@drawable/ic_launcher_background" />
        <TextView
            android:id="@+id/news_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="169dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="19dp"
            android:layout_toRightOf="@id/news_pic"
            android:maxLines="2"//设置显示文字的行数
            android:text="TextView" />
        <TextView
            android:id="@+id/news_desc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/news_title"
            android:layout_alignStart="@id/news_title"
            android:layout_marginStart="-1dp"
            android:layout_marginTop="18dp"
            android:maxLines="3"//设置显示文字的行数
            android:text="TextView" />
    </RelativeLayout>
</com.google.android.material.card.MaterialCardView>

示例:在这里插入图片描述

第六步:创建实体类

News.java

package com.lyh.rxjava.model;
import java.util.List;
public class News {
    private boolean success;
    private String title;
    private String subtitle;
    private String update_time;
    private List<Data> data;
    @Override
    public String toString() {
        return "News{" +
                "success=" + success +
                ", title='" + title + '\'' +
                ", subtitle='" + subtitle + '\'' +
                ", update_time='" + update_time + '\'' +
                ", data=" + data +
                '}';
    }
    public News(boolean success, String title, String subtitle, String update_time, List<Data> data) {
        this.success = success;
        this.title = title;
        this.subtitle = subtitle;
        this.update_time = update_time;
        this.data = data;
    }
    public boolean isSuccess() {
        return success;
    }
    public void setSuccess(boolean success) {
        this.success = success;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getSubtitle() {
        return subtitle;
    }
    public void setSubtitle(String subtitle) {
        this.subtitle = subtitle;
    }
    public String getUpdate_time() {
        return update_time;
    }
    public void setUpdate_time(String update_time) {
        this.update_time = update_time;
    }
    public List<Data> getData() {
        return data;
    }
    public void setData(List<Data> data) {
        this.data = data;
    }
    public class Data {
        private int index;
        private String title;
        private String desc;
        private String pic;
        private String hot;
        private String url;
        private String mobilUrl;
        @Override
        public String toString() {
            return "Data{" +
                    "index=" + index +
                    ", title='" + title + '\'' +
                    ", desc='" + desc + '\'' +
                    ", pic='" + pic + '\'' +
                    ", hot='" + hot + '\'' +
                    ", url='" + url + '\'' +
                    ", mobilUrl='" + mobilUrl + '\'' +
                    '}';
        }
        public int getIndex() {
            return index;
        }
        public void setIndex(int index) {
            this.index = index;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getDesc() {
            return desc;
        }
        public void setDesc(String desc) {
            this.desc = desc;
        }
        public String getPic() {
            return pic;
        }
        public void setPic(String pic) {
            this.pic = pic;
        }
        public String getHot() {
            return hot;
        }
        public void setHot(String hot) {
            this.hot = hot;
        }
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public String getMobilUrl() {
            return mobilUrl;
        }
        public void setMobilUrl(String mobilUrl) {
            this.mobilUrl = mobilUrl;
        }
        public Data(int index, String title, String desc, String pic, String hot, String url, String mobilUrl) {
            this.index = index;
            this.title = title;
            this.desc = desc;
            this.pic = pic;
            this.hot = hot;
            this.url = url;
            this.mobilUrl = mobilUrl;
        }
    }
}

第七步:创建适配器

NewsAdepter.java

package com.lyh.rxjava.adepter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.lyh.rxjava.R;
import com.lyh.rxjava.model.News;
import java.util.List;

public class NewsAdepter extends RecyclerView.Adapter<NewsAdepter.ViewHolder> {
    private  List<News.Data>list;
    public void setResource(List<News.Data>list){
        this.list=list;
        notifyDataSetChanged();//更新
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item, parent, false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        News.Data data = list.get(position);
        Glide.with(holder.view).load(data.getPic()).into(holder.news_pic);
        holder.news_desc.setText(data.getDesc());
        holder.news_title.setText(data.getTitle());
    }
    @Override
    public int getItemCount() {
        return list==null ? 0: list.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView news_pic;
        TextView news_title,news_desc;
        View view;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            view=itemView;
            news_pic=itemView.findViewById(R.id.news_pic);
            news_title=itemView.findViewById(R.id.news_title);
            news_desc=itemView.findViewById(R.id.news_desc);
        }
    }
}

第八步:设置适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv_img=findViewById(R.id.rv_img);
         newsAdepter=new NewsAdepter();
        LinearLayoutManager layoutManager=new LinearLayoutManager(MainActivity.this);
        rv_img.setLayoutManager(layoutManager);
        rv_img.setAdapter(newsAdepter);
        retrofitGet();
    }

第九步:进行网络请求

  1. 创建请求接口
  2. 开始网络请求
  3. 处理返回结果
 private void retrofitGet() {
     
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl("https://api.vvhan.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        GetRequest_Interface request=retrofit.create(GetRequest_Interface.class);
        Observable<News> observable = request.getobervable();
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<News>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }
                    @Override
                    public void onNext(News news) {
                        newsAdepter.setResource(news.getData());
                    }
                    @Override
                    public void onError(Throwable e) {
                        Log.i("error","连接失败");
                    }
                    @Override
                    public void onComplete() {
                        Log.i("complete","连接完成");
                    }
                });
    	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值