0
点赞
收藏
分享

微信扫一扫

Android Retrofit 2.0自定义Converter(JSONObject Converter)


如果在使用的过程中,不需要Gson以及其他转换器,只是单纯的返回 JSONObject,那这样怎么处理呢?

通过阅读源码发现,可以通过自定义转换器的方式操作:

import retrofit.Call
/*Retrofit 2.0*/

public interfase ApiService{
@POST("/list")
Call<JSONObject> loadRepo();
}

同步操作:

Call<JSONObject> call = service.loadRepo();
Repo repo = call.excute()

异步操作:

Call<JSONObject> call = service.loadRepo();
call.enqueue(new Callback<JSONObject>(){
@Override
public void onResponse(Response<JSONObject> response){
//从response.body()中获取结果
}
@Override
public void onFailure(Throwable t){

}
});

这样就完了么?不。

  • 添加自定义Converter

地址:​​https://github.com/brokge/Retrofit2.0-JSONCoverter​​​
选择相应版本添加到项目中。(Retrofit 2.0 -beta2和Retrofit 2.0-beta4 处理方式不同)

  • GsonConverterFactory.create(gson)换成 JsonConverterFactory.create()

关键代码:

public class JsonConverterFactory extends Converter.Factory

public static JsonConverterFactory create() {
return new JsonConverterFactory ();
}

@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
return new JsonResponseBodyConverter<JSONObject>();
}

@Override
public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
return new JsonRequestBodyConverter<JSONObject>();
}


}


final class JsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {

JsonResponseBodyConverter() {

}

@Override
public T convert(ResponseBody value) throws IOException {
JSONObject jsonObj;
try {
jsonObj = new JSONObject(value.string());
return (T) jsonObj;
} catch(JSONException e) {
return null;
}
}
}

完整代码如下:

private static Retrofit initRetrofit() {
OkHttpClient httpClient = new OkHttpClient();
if (BuildConfig.DEBUG) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
httpClient = new OkHttpClient.Builder().addInterceptor(logging).build();
}
return new Retrofit.Builder()
.baseUrl(BaseUtil.getApiUrl())
.addConverterFactory(JsonConverterFactory.create())
.client(httpClient)
.build();

或许下面文章你也感兴趣:
​Android Retrofit 请求字符串(非JSON数据)

Retrofit 自定义Converter


举报

相关推荐

0 条评论