【发布时间】:2014-11-09 06:37:50
【问题描述】:
我正在使用 Retrofit,我想访问从服务器返回的 JSON 响应。有人可以给我建议。谢谢
【问题讨论】:
标签: java android json gson retrofit
我正在使用 Retrofit,我想访问从服务器返回的 JSON 响应。有人可以给我建议。谢谢
【问题讨论】:
标签: java android json gson retrofit
如果您只想查看用于调试目的的响应,只需在改造中打开调试并查看日志。是这样的:
restAdapter.setDebuggingEnabled(true);
如果您一直需要访问代码中的直接响应,则应该在 httpclient 级别执行此操作,因为它基本上绕过了改造的目的
【讨论】:
要打印响应对象,首先通过Callback<Object> cb 将回调对象类型更改为通用对象类型。然后在您的成功回调中,您只需记录对象以将 Json 格式的版本打印到控制台。
@Override
public void success(Object o, Response response) {
Log.i("Tag", "Login data " + o.toString());
}
要打印请求对象,您可以使用您使用的任何 Json 库(这里我使用 Gson)将请求对象序列化为 Json 并将其记录到控制台。
Log.i("Tag", "Request data " + new Gson().toJson(requestObject));
【讨论】:
您需要获取字符串格式的响应,然后使用 gson 解析数据。 要获得字符串响应,您可以通过扩展 retrofit.converter.Converter 来使用 CustomStringConverter,或者只从成功结果的响应中获取输入流。
public void success(Response r1, Response r2) {
IntputStream in = r1.getBody().in()
//convert this inputstream to string
}
【讨论】:
如果您想使用 Retrofit 的全部功能并为自己保留原始输入(例如,将其保存在持久缓存中),您可以扩展 Converter,例如
RestAdapter restAdapter = new RestAdapter.Builder()
.setConverter(new GsonConverter(gson) {
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException {
try {
byte[] buffer = new byte[body.length()];
body.in().read(buffer);
body.in().reset();
}
catch (IOException e) {
throw new ConversionException(e);
}
return super.fromBody(body, type);
}
})
...build();
ResponseInterface ri = restAdapter.create(ResponseInterface.class);
【讨论】:
你也可以这样记录结果
mRestAdapter = new RestAdapter.Builder()
.setEndpoint(getBaseUrl())
.setLogLevel(RestAdapter.LogLevel.FULL) //Log the result
.build();
【讨论】: