Rxjava+Retrofit简单使用

发布时间:2024年01月09日

Rxjava+Retrofit简单使用

retrofit通过网络线程获得的数据,数据只能在网络线程中使用,无法传递到主线程中。所以可以用rxjava的观察者模式使数据提取在主线程中使用。

1.导入依赖

build.gradle(:app)文件的dependencies{}中

//retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
//rxjava
    //RxJava的依赖包
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    //RxAndroid的依赖包
    implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
    //rxjava+retrofit
    implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0"
  • rxjava不仅要导入rxjava本身,还要导入rxjava+retrofit联合的依赖
2.调用使用
  1. Observable承接网络类

    api类:

    //GET请求
        //公众号
        @GET("wxarticle/chapters/json")
        Observable<Data<List<chapters>>> getChapData();
    //POST请求,如果有参数需要添加 @FormUrlEncoded注解,即和@Field配合使用
        @FormUrlEncoded
        @POST("food/getFoods")
        Observable<Data<List<Food>>> postFood(@Field("categoryId") Integer categoryId);
    
  2. 填入前部分的网址

    (从此开始在)主函数类:

    private Retrofit mRetrofit;
    mRetrofit= new Retrofit.Builder()
            .baseUrl("https://wanandroid.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava3CallAdapterFactory.create())	//多添加的部分
            .build();
    
  3. 获得api数据并处理

    Api api = mRetrofit.create(Api.class);
    //GET请求
    api.getTopArticleData()	//函数
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Data<List<ArticleDatas>>>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {
    
                }
                @Override
                public void onNext(@NonNull Data<List<ArticleDatas>> articleListData) {
                    //将获得的数据赋值到全局变量中,来提取数据
                    /*填入list为例*/
                    if (categories == null) return;
                    Log.i("TAG", "body获得");
                    List<OrderCategories> info = categories.getData();
                    if (info == null) return;
                    Log.i("TAG", "info获得");
                    for (OrderCategories oi : info) {
                       titles.add(oi.getName());
                       Ocategories.add(oi);
                    }
                }
                @Override
                public void onError(@NonNull Throwable e) {
    
                }
    
                @Override
                public void onComplete() {
                    //获得数据后的操作,即有执行顺序的操作
                }
            });
    //POST请求
    Observable<Data<List<OrderCategories>>> obcategories = api.postCategories(categoryType);	//定义Observable来调用函数
            obcategories.subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Observer<Data<List<OrderCategories>>>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
    
                        }
    
                        @Override
                        public void onNext(@NonNull Data<List<OrderCategories>> categories) {
                           
                        }
    
                        @Override
                        public void onError(@NonNull Throwable e) {
                            //报错调试
                            Log.d(TAG, "onError: 失败");
                            e.printStackTrace();
                        }
    
                        @Override
                        public void onComplete() {
    
                        }
                    });
    
文章来源:https://blog.csdn.net/qq_56611561/article/details/135457646
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。