提问者:小点点

使用改进的v2.0.0-beta1转换为JSONObject / JSONArray


我目前正在升级到版本2.0.0-beta1,文档中说:

默认情况下,Retrofit 只能将 HTTP 正文反序列化为 OkHttp 的 ResponseBody 类型,并且只能接受其 RequestBody 类型@Body。

可以添加转换器以支持其他类型的转换器。六个同级模块可调整常用的序列化库,以方便您使用。

我到底该如何添加GSON转换器,以便接收<code>GSON.JsonObject</code>或<code>葛兰素史克。JsonArray</code<内容类型:application/json</code〕的响应,而不是<code>RequestBody</code?

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

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);

共1个答案

匿名用户

从Retrofit2开始,它将不附带默认转换器,因此您需要显式添加一个转换器。

您可以像这样添加。

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<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.recfit:verter-gson:2.0.0-beta1'

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