首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Retroeftv2.0.0-beta1转换为JSONObject / JSONArray

用Retroeftv2.0.0-beta1转换为JSONObject / JSONArray
EN

Stack Overflow用户
提问于 2015-09-01 16:37:05
回答 1查看 1.6K关注 0票数 2

我目前正在升级到Retrofit v.2.0.0-beta1,在医生们中它说:

默认情况下,Retrofit只能将HTTP反序列化为OkHttp的ResponseBody类型,并且它只能接受@Body的RequestBody类型。 可以添加转换器以支持其他类型。六个同级模块适应流行的序列化库,为您提供方便。

我如何确切地添加GSON转换器,而不是RequestBody,而是接收GSON.JsonObjectGSON.JsonArray来响应Content-type: application/json

我的初始化代码如下所示:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-01 17:35:04

由于Retrofit2,它不会附带默认的转换器,因此您需要显式地添加转换器。

你可以这样加。

代码语言:javascript
复制
Retrofit retrofit = new Retrofit.Builder()
            .client(client)
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

并且您可以通过以下任何一种方法获得映射对象

代码语言:javascript
复制
Call<MyObject> call = myService.callMyService();
Response<MyObject> response = call.execute();
MyObject mappedObj = response.body();

代码语言:javascript
复制
Call<MyObject> call = myService.callMyService();
call.enqueue(new Callback<MyObject>() {
    @Override void onResponse(Response response) {
        MyObject mappedObj = response.body();
    }

    @Override void failure(Throwable throwable) {}
});

还添加依赖项compile 'com.squareup.retrofit:converter-gson:2.0.0-beta1'

参考资料:https://speakerdeck.com/jakewharton/simple-http-with-retrofit-2-droidcon-nyc-2015

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32336785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档