Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过改造v2.0.0-beta1转换为JSONObject/JSONArray_Android_Json_Gson_Retrofit - Fatal编程技术网

Android 通过改造v2.0.0-beta1转换为JSONObject/JSONArray

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

我目前正在升级到改装v.2.0.0-beta1,其中说:

默认情况下,改型只能将HTTP主体反序列化为OkHttp的ResponseBody类型,并且只能接受@Body的RequestBody类型

可以添加转换器以支持其他类型。六个同级模块适应流行的序列化库以方便您

我如何添加一个GSON转换器来代替
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) {}
});