【Android -- RxJava】RxJava2.0 实践(四),结合 Retrofit 框架进行网络请求

前言

本文我们就通过一个简单的例子,通过 RxJava + Retrofit 的方式实现网络请求。通过该例子,可以学习如何将 RetrofitRxJava 结合进行网络请求。

效果图

在这里插入图片描述

具体实现

1. 添加依赖

	//Butter Knife
    implementation 'com.jakewharton:butterknife:10.2.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'

    //TitleBar
    implementation 'com.github.getActivity:TitleBar:8.6'

    //RxJava
    implementation 'io.reactivex.rxjava2:rxjava:2.2.10'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

	//retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    //Gson converter
    implementation 'com.squareup.retrofit2:converter-gson:2.6.1'
    //RxJava2 Adapter
    implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

2. 添加网络权限

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

3. 接口介绍

首先来熟悉一下所用到的测试接口,其数据来自于 玩Android 开放API
在这里插入图片描述
返回的数据格式如下:
在这里插入图片描述

4. 编写实体类

/**
 * Created on 2022/6/24 15:59
 *
 * @author Gong Youqiang
 */
public class Translation implements Serializable {

    @SerializedName("errorCode")
    public Integer errorCode;
    @SerializedName("errorMsg")
    public String errorMsg;
    @SerializedName("data")
    public List<DataDTO> data;

    public static class DataDTO implements Serializable {
        @SerializedName("id")
        public Integer id;
        @SerializedName("link")
        public String link;
        @SerializedName("name")
        public String name;
        @SerializedName("order")
        public Integer order;
        @SerializedName("visible")
        public Integer visible;
    }
}

5. 定义 Retrofit 需要的请求接口

public interface Api {
    @GET("hotkey/json")
    Observable<Translation> getCall();
}

当我们需要请求数据时,就应当像下面这样构造一个 Observable<Translation>

  • baseUrl:定义请求链接的前缀
  • addConverterFactory:将 OKHttp 返回的标准 Response 解析成我们所需要的数据类型 Translation
  • addCallAdapterFactory:将Call<Translation>转换成 Observable<Translation>,这样才能真正将 RetrofitRxJava结合起来。
private Observable<Translation> getObservable() {
        Api api = new Retrofit.Builder()
                .baseUrl("https://www.wanandroid.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build().create(Api.class);
        return api.getCall();
    }

6. 发起请求

public class MainActivity extends BaseActivity {
    private static final String TAG = "MainActivity";
    @BindView(R.id.recyclerView)
    RecyclerView mRecyclerView;

    private NewsAdapter mAdapter;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initView() {
        refreshArticle();
    }

    private void refreshArticle() {
        Observable<Translation> observable = getObservable();

        // 步骤2:发送网络请求
        observable.subscribeOn(Schedulers.io())               // 在IO线程进行网络请求
                .observeOn(AndroidSchedulers.mainThread())  // 回到主线程 处理请求结果
                .subscribe(new Observer<Translation>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "开始采用subscribe连接");
                    }

                    @Override
                    public void onNext(Translation result) {
                        mAdapter = new NewsAdapter(R.layout.item_news,result.data);

                        mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

                        mRecyclerView.setAdapter(mAdapter);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "请求失败");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "请求成功");
                    }
                });
    }

    private Observable<Translation> getObservable() {
        Api api = new Retrofit.Builder()
                .baseUrl("https://www.wanandroid.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build().create(Api.class);
        return api.getCall();
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin-Dev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值