一、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端网络请求。