繁体   English   中英

改进如何打印响应JSON

[英]Retrofit How To Print Out Response JSON

我正在使用Retrofit,我希望能够访问从服务器返回的JSON响应。 有人可以告诉我。 谢谢

如果您只想查看响应的调试目的,只需打开改造中的调试并查看日志。 它是这样的:

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解析数据。 要获得String响应,您可以通过扩展retrofit.converter.Converter来使用CustomStringConverter,或者只是从成功结果的响应中获取输入流。

public void success(Response r1, Response r2) {

    IntputStream in  = r1.getBody().in()
       //convert this inputstream to string
}

如果你想使用Retrofit的全部功能并为自己保留原始输入(例如将其保存在持久缓存中),你可以扩展转换器 ,例如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM