这两个框架都是现在特别流行的框架,强强联合使我们的效率变得更加的直接
首先我们需要导入其中的依赖
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<UserInfo> login = HttpUtils.getInstance().api.login("XXXXX", "XXXXX");
login.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<UserInfo>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(UserInfo userInfo) {
Log.e("这是一个打印日志==","请求的数据就是在这里");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}