【问题标题】:Retrofit How To Print Out Response JSON改造如何打印出响应 JSON
【发布时间】:2014-11-09 06:37:50
【问题描述】:

我正在使用 Retrofit,我想访问从服务器返回的 JSON 响应。有人可以给我建议。谢谢

【问题讨论】:

    标签: java android json gson retrofit


    【解决方案1】:

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

    restAdapter.setDebuggingEnabled(true);
    

    如果您一直需要访问代码中的直接响应,则应该在 httpclient 级别执行此操作,因为它基本上绕过了改造的目的

    【讨论】:

    • 这就是我要找的。我更新了代码 sn-p 以使用正确的方法注销 Retrofit。你所有的答案都是正确的,所以谢谢大家。
    【解决方案2】:

    要打印响应对象,首先通过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));
    

    【讨论】:

    • 我收到此错误,因此它永远不会进入成功函数并进入失败函数。有什么想法吗? com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 应为 BEGIN_OBJECT 但为 BEGIN_ARRAY
    • 尝试使用对象列表
    • 我已经尝试过了,但仍然出现错误。请看这个问题:stackoverflow.com/questions/25817604/…
    【解决方案3】:

    您需要获取字符串格式的响应,然后使用 gson 解析数据。 要获得字符串响应,您可以通过扩展 retrofit.converter.Converter 来使用 CustomStringConverter,或者只从成功结果的响应中获取输入流。

    public void success(Response r1, Response r2) {
    
        IntputStream in  = r1.getBody().in()
           //convert this inputstream to string
    }
    

    【讨论】:

      【解决方案4】:

      如果您想使用 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);
      

      【讨论】:

        【解决方案5】:

        你也可以这样记录结果

        mRestAdapter = new RestAdapter.Builder()
                    .setEndpoint(getBaseUrl())
                    .setLogLevel(RestAdapter.LogLevel.FULL) //Log the result
                    .build();
        

        【讨论】:

          猜你喜欢
          • 2016-01-03
          • 1970-01-01
          • 1970-01-01
          • 2019-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-20
          相关资源
          最近更新 更多