java创建请求拦截器_80.简单Retrofit+RxJava+日志拦截器结合使用
1.需要使用到的依賴如下(Retrofit\RxJava\RecyclerView\日志攔截器)
//only Retrofit(只用Retrofit聯網)
implementation 'io.reactivex:rxjava:x.y.z'
implementation 'io.reactivex:rxandroid:1.0.1'
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
implementation
'com.squareup.retrofit2:converter-gson:2.0.2'
implementation
'com.squareup.retrofit2:adapter-rxjava:2.0.2'
implementation
'com.android.support:recyclerview-v7:27.1.1'
//1 如果使用OKHttp了,就將以前的依賴使用下面的依賴替換掉,下面的依賴會自帶攔截器:
implementation
'com.squareup.okhttp3:logging-interceptor:3.12.0'
2.省略的一些東西
封裝類bean、
接口IView
接口回調ICallBack、
適配器adapter、
網絡數據地址請求Model、
地址存放API、
與以往的寫法都相同,此處就不再寫了,不會的,可以翻閱前面的文章。
3.主要的RetrofitIView。
注意點:
以前單單使用Retrofit的時候,在注解@Get或其他下面使用的是Call
ResponseBody>?方法();
現在結合Rxjava使用,在注解@Get或其他下面使用的是被觀察者Observable?ResponseBody> 方法();
如果使用單個參數拼接,可以來方法小括號中添加?(@Query("字段")?類型?字段屬性)
舉例:
public interface RetrofitView {
//北京天氣
@GET("weather_mini")
//注意Observable 右側還有加括號,里面是ResponseBody?拼接字段可以在方法小括號中使用(@Query(“字段”) 類型?字段)
Observable ResponseBody> getWeather(@Query("city") String
city);
}
4.網絡請求工具類
package com.bwie.lx_retrofit_rxjava.utils;
import android.util.Log;
import com.bwie.lx_retrofit_rxjava.bean.WeatherBean;
import com.bwie.lx_retrofit_rxjava.item.ICallBack;
import com.google.gson.Gson;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import
retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class RxRetrofitUtils {
//使用單例模式
private static volatile RxRetrofitUtils instance;
private final Retrofit.Builder mBuilder;
private RetrofitView mRx {
//日志攔截器
//1 設置日志攔截器級別
HttpLoggingInterceptor.Level level =
HttpLoggingInterceptor.Level.BODY;
//2 創建一個日志攔截器
HttpLoggingInterceptor httpLoggingInterceptor = new
HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
//打印信息
Log.i("http信息打印:", "log: " + message);
}
});
//3 為日志攔截器設置日志級別
httpLoggingInterceptor.setLevel(level);
//4 創建HttpClient對象 添加攔截器
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(5000, TimeUnit.SECONDS)
.readTimeout(5000, TimeUnit.SECONDS)
.writeTimeout(5000, TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.build();
//5 將HttpClient對象加入到Retrofit中
//創建Retrifit對象
mBuilder = new Retrofit.Builder();
//設置 Json 轉換器
mBuilder.addConverterFactory(GsonConverterFactory.create());
//添加日志攔截器
mBuilder.client(okHttpClient);
}
//雙重鎖機制
public static RxRetrofitUtils getInstance(){
if(instance==null){
synchronized (RxRetrofitUtils.class){
if(instance==null){
instance = new RxRetrofitUtils();
}
}
}
return instance;
}
//抽取出來的方法
private void getWeatherBeiJing(String url) {
Retrofit retrofit =
mBuilder.baseUrl(url)//添加請求網址,以/結尾
.addCallAdapterFactory(Rx )//括號里?是RxJava 適配器
CallAdapterFactory?點?create()創建一個 。將英文拼接,就是小括號里的參數
.build();
mRxJavaService =
retrofit.create(RetrofitView.class);
}
//北京天氣網絡請求方法
public void getWeatherU(String url, final ICallBack iCallBack,
final Type type ){
//Retrofit+Rxjava 設置方法?收取出來的
getWeatherBeiJing(url);
//通過接口對象mRxJavaService.點?調用抽象方法如 getWeather("北京")
Observable ResponseBody> weather =
mRxJavaService點RetrofitIView中的抽象方法;
//通過上一步得到的對象,進行設置
weather.subscribeOn(Schedulers.io())//IO線程加載數據
.observeOn(AndroidSchedulers.mainThread())//主線程顯示數據
.subscribe(new Subscriber ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
String str = "網絡請求訪問失敗";
iCallBack.onFailder(str);
}
@Override
public void onNext(ResponseBody responseBody) {
try {
//注意:這兒不用response.body了,它已經是responsebody
String result = responseBody.string();
WeatherBean weatherBean1 = new Gson().fromJson(result,
type);
Log.e("TAG", "response == " +
weatherBean1.getData().getGanmao());
if(weatherBean1!=null){
iCallBack.onSuccess(weatherBean1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的java创建请求拦截器_80.简单Retrofit+RxJava+日志拦截器结合使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 自定义异常 未回滚_抛出自定义
- 下一篇: ejb java bean的区别_关于e