Android 通过改造v2.0.0-beta1转换为JSONObject/JSONArray
我目前正在升级到改装v.2.0.0-beta1,其中说: 默认情况下,改型只能将HTTP主体反序列化为OkHttp的ResponseBody类型,并且只能接受@Body的RequestBody类型 可以添加转换器以支持其他类型。六个同级模块适应流行的序列化库以方便您 我如何添加一个GSON转换器来代替Android 通过改造v2.0.0-beta1转换为JSONObject/JSONArray,android,json,gson,retrofit,Android,Json,Gson,Retrofit,我目前正在升级到改装v.2.0.0-beta1,其中说: 默认情况下,改型只能将HTTP主体反序列化为OkHttp的ResponseBody类型,并且只能接受@Body的RequestBody类型 可以添加转换器以支持其他类型。六个同级模块适应流行的序列化库以方便您 我如何添加一个GSON转换器来代替RequestBody接收GSON.JsonObject或GSON.JsonArray内容类型为的响应:application/json 我的初始化代码如下所示: OkHttpClient clie
RequestBody
接收GSON.JsonObject
或GSON.JsonArray
内容类型为的响应:application/json
我的初始化代码如下所示:
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new AuthInterceptor(authState));
client.interceptors().add(new LoggingInterceptor());
restClient = new Retrofit.Builder()
.client(client)
.baseUrl(BASE_URL)
.build()
.create(RestClient.class);
由于改型2,它将不会附带默认转换器,因此您需要显式添加一个转换器 你可以这样加
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
您可以通过以下任一方法获得映射对象:
Call<MyObject> call = myService.callMyService();
Response<MyObject> response = call.execute();
MyObject mappedObj = response.body();
Call Call=myService.callMyService();
Response=call.execute();
MyObject mappedObj=response.body();
或
Call Call=myService.callMyService();
call.enqueue(新回调(){
@覆盖无效onResponse(响应){
MyObject mappedObj=response.body();
}
@覆盖无效失败(可丢弃可丢弃){
});
还要添加依赖项
compile'com.squareup.reformation:converter-gson:2.0.0-beta1'
参考:为什么要接收Gson包装器对象而不是POJO?因为我更喜欢像地图一样使用它们。我正在处理的API中有许多不同的端点,导致了各种不同的类型。来自更多的动态语言,如Java,这似乎给我带来了更多的麻烦。我希望这个问题可能会对你有所帮助。在改型2中,每个调用都是一个单独的对象,并且它是类型化的(是!!),因此你可以为每个不同的端点指定响应对象的类型。我更新了如何为特定调用指定类型的示例。所以,与其自己获得通用映射并进行映射,不如改型已经为您这样做了。
Call<MyObject> call = myService.callMyService();
call.enqueue(new Callback<MyObject>() {
@Override void onResponse(Response response) {
MyObject mappedObj = response.body();
}
@Override void failure(Throwable throwable) {}
});