日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java创建请求拦截器_80.简单Retrofit+RxJava+日志拦截器结合使用

發(fā)布時間:2025/6/15 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java创建请求拦截器_80.简单Retrofit+RxJava+日志拦截器结合使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.需要使用到的依賴如下(Retrofit\RxJava\RecyclerView\日志攔截器)

//only Retrofit(只用Retrofit聯(lián)網(wǎng))

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

接口回調(diào)ICallBack、

適配器adapter、

網(wǎng)絡(luò)數(shù)據(jù)地址請求Model、

地址存放API、

與以往的寫法都相同,此處就不再寫了,不會的,可以翻閱前面的文章。

3.主要的RetrofitIView。

注意點:

以前單單使用Retrofit的時候,在注解@Get或其他下面使用的是Call

ResponseBody>?方法();

現(xiàn)在結(jié)合Rxjava使用,在注解@Get或其他下面使用的是被觀察者Observable?ResponseBody> 方法();

如果使用單個參數(shù)拼接,可以來方法小括號中添加?(@Query("字段")?類型?字段屬性)

舉例:

public interface RetrofitView {

//北京天氣

@GET("weather_mini")

//注意Observable 右側(cè)還有加括號,里面是ResponseBody?拼接字段可以在方法小括號中使用(@Query(“字段”) 類型?字段)

Observable ResponseBody> getWeather(@Query("city") String

city);

}

4.網(wǎng)絡(luò)請求工具類

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 設(shè)置日志攔截器級別

HttpLoggingInterceptor.Level level =

HttpLoggingInterceptor.Level.BODY;

//2 創(chuàng)建一個日志攔截器

HttpLoggingInterceptor httpLoggingInterceptor = new

HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {

@Override

public void log(String message) {

//打印信息

Log.i("http信息打印:", "log: " + message);

}

});

//3 為日志攔截器設(shè)置日志級別

httpLoggingInterceptor.setLevel(level);

//4 創(chuàng)建HttpClient對象 添加攔截器

OkHttpClient okHttpClient = new OkHttpClient.Builder()

.connectTimeout(5000, TimeUnit.SECONDS)

.readTimeout(5000, TimeUnit.SECONDS)

.writeTimeout(5000, TimeUnit.SECONDS)

.addInterceptor(httpLoggingInterceptor)

.build();

//5 將HttpClient對象加入到Retrofit中

//創(chuàng)建Retrifit對象

mBuilder = new Retrofit.Builder();

//設(shè)置 Json 轉(zhuǎn)換器

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)//添加請求網(wǎng)址,以/結(jié)尾

.addCallAdapterFactory(Rx )//括號里?是RxJava 適配器

CallAdapterFactory?點?create()創(chuàng)建一個 。將英文拼接,就是小括號里的參數(shù)

.build();

mRxJavaService =

retrofit.create(RetrofitView.class);

}

//北京天氣網(wǎng)絡(luò)請求方法

public void getWeatherU(String url, final ICallBack iCallBack,

final Type type ){

//Retrofit+Rxjava 設(shè)置方法?收取出來的

getWeatherBeiJing(url);

//通過接口對象mRxJavaService.點?調(diào)用抽象方法如 getWeather("北京")

Observable ResponseBody> weather =

mRxJavaService點RetrofitIView中的抽象方法;

//通過上一步得到的對象,進行設(shè)置

weather.subscribeOn(Schedulers.io())//IO線程加載數(shù)據(jù)

.observeOn(AndroidSchedulers.mainThread())//主線程顯示數(shù)據(jù)

.subscribe(new Subscriber ResponseBody>() {

@Override

public void onCompleted() {

}

@Override

public void onError(Throwable e) {

String str = "網(wǎng)絡(luò)請求訪問失敗";

iCallBack.onFailder(str);

}

@Override

public void onNext(ResponseBody responseBody) {

try {

//注意:這兒不用response.body了,它已經(jīng)是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();

}

}

});

}

}

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的java创建请求拦截器_80.简单Retrofit+RxJava+日志拦截器结合使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。