Rxjava2+Retrofit2结合mvp的简单教程Rxjava篇(一):Rxjava的基本使用


开始讲之前,先推荐大牛的文章让大家去了解一下rxjava

好了,现在我们开始本篇文章

  • 1 第一步上网址:https://github.com/ReactiveX/RxJava,虽然rxjava1和2是分别维护的,但是未来rxjava1.x可能就不维护了,所以大家尽量使用rxjava2,毕竟学习成本是一样的。
  • 2 引用到项目
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//retrofit适配器,注意是adapter-rxjava2,如果使用的是rxjava,请使用adapter-rxjava
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'//rxandroid,注意是切换到主线程使用的
    compile 'io.reactivex.rxjava2:rxjava:2.1.2'
  • 3 retrofit创建时添加rxjava2适配器,代码如下
 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())//添加gson转换器
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加rxjava2适配器
                .build();
  • 4 修改RetrofitService请求返回结果为Observable<ResponseBody>,代码如下
public interface RetrofitService {
    @FormUrlEncoded
    @POST("app/gift/gift_list/")
    Observable<ResponseBody> getGameList(@FieldMap Map<String, String> map);
}
  • 5 在activity中调用,代码如下
public class RxjavaSimpleUseActivity extends AppCompatActivity {
    private TextView tvResult;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.retrofit);//布局和retrofit一样,使用textview显示结果
        tvResult = (TextView) findViewById(R.id.tv_result);
        //POST请求和上篇一样,创建请求体
        final Map<String, String> map = new HashMap<String, String>();
        map.put("page", "1");
        map.put("code", "news");
        map.put("pageSize", "20");
        map.put("parentid", "0");
        map.put("type", "1");
        HttpCenter.getInstance().service.getGameList(map)
                .subscribeOn(Schedulers.io())//指定网络请求在io线程
                .observeOn(AndroidSchedulers.mainThread())//指定返回结果处理在主线程,这样我们就可以在onnext中更新ui了
                .subscribe(new Observer<ResponseBody>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {

                    }

                    @Override
                    public void onNext(@NonNull ResponseBody responseBody) {
                        try {
                            tvResult.setText(responseBody.string());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

至此运行程序,你就能在屏幕上看到返回结果了,是的就是这么简单。下一篇我们会对rxjava进行封装,希望不熟悉rxjava的小伙伴,认真看一下大神的文章。
本篇代码已经上传:https://github.com/MrAllRight/HttpExample

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容