Android中封装Rxjava2+Retrofit+okhttp 网络请求
当下Android封装的网络工具类中使用比较多的就是RxJava+retrofit+Okhttp##
话不多说了,直接上代码吧
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;
}
}
}
以上就是完整的RxJava+retrofit+Okhttp的网络请求,以上代码不是标准,纯属个人习惯,不喜勿喷,如果发现问题,请大佬多多指点