当前位置: 首页 > 工具软件 > RxJava > 使用案例 >

Rxjava+Retrofit

郭元明
2023-12-01

//Rxjava
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

//okhttp3
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
//日志
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
//——   Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.2'
implementation 'com.blankj:utilcode:1.27.2'

定义接口数据

public interface Api {

    //http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1 油闷大虾串'
    //@Query 单个参数的key值
    //@QueryMap map集合
    @GET("dish_list.php")
    Observable<FoodBean> foodList(@Query("stage_id") int stage_id, @Query("limit") int limit, @Query("page") int page);

    @FormUrlEncoded
    @POST("/hornetUser/login")
    Observable<UserBean> login(@Field("username") String username, @Field("user_password") String pwd);


    @POST("/hornetUser/register")
    Observable<UserBean> register(@Body RequestBody body);

}

封装网络请求

package com.example.aa;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitManager {
    private static RetrofitManager manager;

    public static synchronized RetrofitManager getManager() {
        if (manager == null) {
            manager = new RetrofitManager();
        }
        return manager;
    }

    private Retrofit retrofit;

    public Retrofit getRetrofit() {
        if (retrofit == null) {
            create();
        }
        return retrofit;
    }

    private void create() {
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient.Builder okBuilder = new OkHttpClient.Builder();
        okBuilder.addInterceptor(interceptor);
        okBuilder.connectTimeout(2, TimeUnit.MINUTES);
        okBuilder.readTimeout(2, TimeUnit.MINUTES);
        okBuilder.writeTimeout(2, TimeUnit.MINUTES);


        Retrofit.Builder builder = new Retrofit.Builder();
        //请求链接前缀,所有接口不变到部分,者字符串必须以/结尾
        //http://www.qubaobei.com/ios/cf/
        //http://172.81.227.127:8044/
        builder.baseUrl("http://www.qubaobei.com/ios/cf/");
        //用于做网络请求到客户端(okHttp3)
        builder.client(okBuilder.build());
        //解析工程,可以帮我们把数据直接解析成对象
        builder.addConverterFactory(GsonConverterFactory.create());
        //异步回调适配工程
        builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create());

        retrofit = builder.build();
    }
}

具体方法使用

public void onClick(View view) {
    switch (view.getId()) {
        case R.id.bt1:
            //被观察者 <T> 被观察者和观察者交互数据类型
            Observable<String> observable = new Observable<String>() {
                //订阅 Observer 观察者 可以完成观察者的通知
                @Override
                protected void subscribeActual(Observer<? super String> observer) {
                    observer.onNext("小偷上车了");
                    observer.onNext("发现美女");
                    observer.onNext("偷包!");
                    observer.onComplete();
                }
            };
            //被观察者在那个线程执行
            observable.subscribeOn(Schedulers.io());
            //观察者在那个线程执行  AndroidSchedulers.mainThread()主线程
            observable.observeOn(AndroidSchedulers.mainThread());
            //通过subscribe操作符 完成观察者与被观察者的订阅
            observable.subscribe(new Observer<String>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(String s) {
                    Log.d("---", "" + s);
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {
                    Log.d("---", "Complete");

                }
            });
            break;
        case R.id.bt2:
            Observable.just("小偷上车了", "发现美女")
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(String s) {
                            Log.d("===", "" + s);
                        }

                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onComplete() {

                        }
                    });

            break;
        case R.id.bt3:
            //多线程合并
            //上传头像
            Observable<String> uploadOb = new Observable<String>() {
                @Override
                protected void subscribeActual(Observer<? super String> observer) {
                    observer.onNext("上传中");
                    observer.onComplete();
                }
            };

            //修改回调
            Observable<String> updataInfoOb = new Observable<String>() {
                @Override
                protected void subscribeActual(Observer<? super String> observer) {
                    observer.onNext("修改信息中");
                    observer.onComplete();
                }
            };

            Observable.merge(uploadOb, updataInfoOb)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(String s) {
                            Log.d("+++", "" + s);
                        }

                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onComplete() {
                            //一二两线程完成 打印
                            Log.d("+++", "Complete");
                        }
                    });

            break;

        case R.id.bt4:
            //get 请求
            RetrofitManager.getManager().getRetrofit()
                    .create(Api.class)
                    .foodList(1, 20, 1)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new Observer<FoodBean>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(FoodBean foodBean) {
                            LogUtils.json(foodBean);
                        }

                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onComplete() {

                        }
                    });
            break;

        case R.id.bt5:
            RetrofitManager.getManager().getRetrofit()
                    .create(Api.class)
                    .login("zhaoxuhui4167", "123456")
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(new Observer<UserBean>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(UserBean userBean) {
                            LogUtils.json(userBean);
                            Log.d("---", "onNext: ");
                        }

                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onComplete() {

                        }
                    });
            break;

        case R.id.bt6:

            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("username","zhaoxuhui");
            jsonObject.addProperty("user_password","123456");
            jsonObject.addProperty("userlevel","1");
            jsonObject.addProperty("uservip","1");

            RequestBody body = RequestBody.create(MediaType.parse("application/json"),jsonObject.toString());

            //body体请求
            RetrofitManager.getManager().getRetrofit()
                    .create(Api.class)
                    .register(body)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Observer<UserBean>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(UserBean userBean) {
                            LogUtils.json(userBean);
                            Log.d("---", "onNext: ");
                        }

                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onComplete() {

                        }
                    });

            break;
    }
}
 类似资料: