您当前的位置: 首页 >  网络

Kevin-Dev

暂无认证

  • 2浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Kevin-Dev 发布时间:2019-07-11 15:47:15 ,浏览量:2

前言

本文我们就通过一个简单的例子,通过 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. 添加网络权限

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 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 getCall();
}

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

  • baseUrl:定义请求链接的前缀
  • addConverterFactory:将 OKHttp 返回的标准 Response 解析成我们所需要的数据类型 Translation
  • addCallAdapterFactory:将Call转换成 Observable,这样才能真正将 RetrofitRxJava结合起来。
private Observable 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 observable = getObservable();

        // 步骤2:发送网络请求
        observable.subscribeOn(Schedulers.io())               // 在IO线程进行网络请求
                .observeOn(AndroidSchedulers.mainThread())  // 回到主线程 处理请求结果
                .subscribe(new Observer() {
                    @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 getObservable() {
        Api api = new Retrofit.Builder()
                .baseUrl("https://www.wanandroid.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build().create(Api.class);
        return api.getCall();
    }

}
关注
打赏
1658837700
查看更多评论
立即登录/注册

微信扫码登录

0.0453s