Encapsulate Rxjava2+Retrofit+okhttp network request in Android
Currently , RxJava+retrofit+Okhttp is widely used among the network tools packaged by Android
public class NetUtil {
private static NetUtil instace;
private Retrofit retrofit;
private NetUtil(){
initNet();
}
//双重校验
public static NetUtil getInstance(){
if (instace==null){
synchronized (NetUtil.class){
instace=new NetUtil();
}
}
return instace;
}
//初始化网络请求
private void initNet(){
//初始化OKHTTP
HttpLoggingInterceptor interceptor=new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient httpClient=new OkHttpClient.Builder()
.writeTimeout(500, TimeUnit.SECONDS)
.readTimeout(500,TimeUnit.SECONDS)
.connectTimeout(500,TimeUnit.SECONDS)
.addInterceptor(interceptor)
//入头参
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
SharedPreferences sharedPreferences = App.context.getSharedPreferences(Constant.SP_NAME, Context.MODE_PRIVATE);
String sessionId = sharedPreferences.getString(Constant.SESSION, "");
int userId = sharedPreferences.getInt(Constant.USERID, 0);
Request request = chain.request();
Request.Builder builder = request.newBuilder();
if (!TextUtils.isEmpty(sessionId)&& userId!=0){
builder.addHeader("sessionId",sessionId);
builder.addHeader("userId", Integer.toString(userId));
Request build=builder.build();
return chain.proceed(build);
}
return chain.proceed(builder.build());
}
})
.build();
//初始化Retrofit
retrofit=new Retrofit.Builder()
.baseUrl(Constant.BASE_URL)
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
}
//初始化ApiService
public ApiService apiService(){
ApiService apiService=retrofit.create(ApiService.class);
return apiService;
}
//网络判断
public boolean hasNetWork(){
ConnectivityManager connectivityManager = (ConnectivityManager) App.context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
if (networkInfo!=null && networkInfo.isConnected()){
return true;
}else {
return false;
}
}
}
The above is the complete RxJava+retrofit+Okhttp network request. The above code is not a standard, it is purely a personal habit. If you don’t like it, don’t spray it. If you find a problem, please give me some advice.