一、OkHttpJson簡介
OkHttpJson是基於OkHttp封裝的一個開源庫,它可以輕鬆地完成Android端網路請求,並將請求結果直接轉為指定的Java對象或List。
OkHttpJson的主要特點如下:
- 支持GET、POST、PUT、DELETE等HTTP請求方式;
- 支持同步或非同步請求;
- 支持自定義解析器,可以將伺服器返回的數據解析成任意Java對象或List;
- 支持請求攔截器,可以方便地實現身份驗證、緩存等功能;
- 支持文件上傳和下載;
- 速度快、可靠穩定。
二、使用OkHttpJson發起網路請求
1. 添加依賴
在項目的build.gradle文件中添加以下依賴:
dependencies {
implementation 'com.github.leonHua-L:OkHttpJson:1.0.1'
}
2. 編寫請求介面
定義請求介面類,使用註解標識請求的URL、請求方法和請求參數。
public interface ApiService {
//獲取天氣信息
@GET("weather")
Call getWeather(@Query("city") String city);
}
其中,@GET表示請求方式為GET,”weather”為請求的URL路徑,@Query(“city”)表示請求參數名為”city”。
3. 發起請求
創建OkHttpClient對象,並創建Retrofit對象,並指定請求的URL。然後創建ApiService實例,並調用獲取天氣信息的方法。
OkHttpClient client = new OkHttpClient.Builder().build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.example.com/")
.addConverterFactory(OkHttpJsonConverterFactory.create())
.client(client)
.build();
ApiService apiService = retrofit.create(ApiService.class);
Call call = apiService.getWeather("Beijing");
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
Weather weather = response.body();
Log.d(TAG, "weather = " + weather.toString());
}
@Override
public void onFailure(Call call, Throwable t) {
Log.e(TAG, "error = " + t.getMessage());
}
});
調用enqueue方法發起非同步請求,請求結果通過回調方法返回,可以直接將返回的結果轉為指定的Java對象。
三、OkHttpJson的高級用法
1. 自定義解析器
OkHttpJson默認使用Gson來解析JSON格式的數據,如果想使用其他的解析器,可以自定義解析器並將其設置到OkHttpJsonConverterFactory中。
public class FastJsonConverter implements Converter {
private final Class type;
public FastJsonConverter(Class type) {
this.type = type;
}
@Override
public T convert(ResponseBody value) throws IOException {
String json = value.string();
return JSON.parseObject(json, type);
}
}
使用FastJsonConverter解析數據,只需要將其傳入OkHttpJsonConverterFactory.create()方法中即可。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.example.com/")
.addConverterFactory(OkHttpJsonConverterFactory.create(new FastJsonConverterFactory()))
.client(client)
.build();
2. 請求攔截器
OkHttpJson支持自定義請求攔截器,可以在請求發送前或響應返回後添加各種操作,比如身份驗證、緩存等。
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Request.Builder builder = originalRequest.newBuilder()
.header("token", "xxx");
Request newRequest = builder.build();
return chain.proceed(newRequest);
}
}
將TokenInterceptor添加到OkHttpClient中即可。
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new TokenInterceptor())
.build();
四、總結
本文介紹了使用OkHttpJson實現Android網路請求的基本用法,包括添加依賴、編寫請求介面、發起請求、自定義解析器和請求攔截器等高級用法。OkHttpJson是一個非常方便、輕量級、高性能的網路請求庫,使用它可以幫助我們快速、簡單地完成Android端網路請求。
原創文章,作者:SIXZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131581.html