Retrofit与RxJava的结合使用-------简易版

这两个框架都是现在特别流行的框架,强强联合使我们的效率变得更加的直接

首先我们需要导入其中的依赖

    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

接下来就是准备拼接我们的数据

api中的方法

这就是封装网络请求类了  我们用的是静态内部类进行的封装 这样使我们的封装变得更加的简洁

public class HttpUtils {

    public final Api api;
    OkHttpClient okHttpClient = new OkHttpClient.Builder().addNetworkInterceptor(new LoggingInterceptor()).build();

    private HttpUtil() {
        Retrofit retrofit = new Retrofit
                .Builder()
                .baseUrl(WebContract.URL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();

        api = retrofit.create(Api.class);
    }

    class LoggingInterceptor implements Interceptor {
        @Override
        public Response intercept(Interceptor.Chain chain) throws IOException {
            Request request = chain.request();

            long t1 = System.nanoTime();

            Response response = chain.proceed(request);

            long t2 = System.nanoTime();

            return response;
        }
    }

    private static class Instance {
        private static HttpUtil httpUtil = new HttpUtil();
    }

    public static HttpUtil getInstance() {
        return Instance.httpUtil;
    }
    }

接下来就使用 通过我们的rx异步来完成,合理的运用观察者、被观察者之间的订阅关系就可以进行请求了

   Observable login = HttpUtils.getInstance().api.login("XXXXX", "XXXXX");
        login.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(UserInfo userInfo) {
                       
                        Log.e("这是一个打印日志==","请求的数据就是在这里");
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

 

你可能感兴趣的:(Retrofit与RxJava的结合使用-------简易版)