前言
Retrofit算是目前最流行的网络框架了,而用的比较多的组合方式是Rxjava+Retrofit,因为RxJava很好的实现了异步通信、UI线程和子线程之间的切换,但是RxJava+Retrofit这一组合有一个缺点,那就是容易造成内存泄漏,因为不能感知UI的生命周期,当然通过加入RxLifeCycle也能解决这一问题。我们今天要说的不是RxLifeCycle,主角是LiveData,下面进入主题。
我们先看LiveData+Retrofit封装,再做分析
LiveData+Retrofit封装
1.添加依赖库
//retrofit
api 'com.squareup.retrofit2:retrofit:2.1.0'
//okhttp
api 'com.squareup.okhttp3:okhttp:3.5.0'
//日志
api 'com.squareup.okhttp3:logging-interceptor:3.6.0'
api 'com.squareup.retrofit2:converter-gson:2.1.0'
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:1.1.0"
// alternatively, just LiveData
implementation "android.arch.lifecycle:livedata:1.1.0"
2.BaseRetrofit
import android.support.annotation.NonNull;
public interface RetrofitWrapper<T> {
/**
* retrofit初始化
*/
void initRetrofit(@NonNull Class<T> tClass);
/**
* 获取http api接口
* @return
*/
T getService();
}
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class BaseRetrofit<T> implements RetrofitWrapper<T> {
private static final String TAG = "BaseRetrofit";
private String url;
private Retrofit retrofit;
private Class<T> tClass;
private T service;
public BaseRetrofit(Class<T> tClass, String url){
this.tClass = tClass;
this.url = url;
initRetrofit(tClass);
}
@Override
public void initRetrofit(Class<T> tClass) {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)
.readTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)
.writeTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)
.addInterceptor(new LoggingInterceptor())
.build();
if (!