【问题标题】:How to get a raw Retrofit response string?如何获取原始改造响应字符串?
【发布时间】:2016-08-09 21:33:04
【问题描述】:

我正在做 Retrofit,但我被困在一件事上:如何在响应正文中获取原始 JSON。

public interface ViewMenuItems {
  @GET
  Call<ResponseBody> listRepos(@Url String url);
}

ViewMenuItems viewMenuItems = ApiClient.getClient().create(ViewMenuItems.class);
  Call<ResponseBody> responseBodyCall = viewMenuItems.listRepos(Webservices.MERCHANT + merchantId + Webservices.MENU_ITEMS_LASTMODIFIED);

       responseBodyCall.enqueue(new Callback<ResponseBody>() {
       @Override
       public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
          Log.d("MenuItems", "Response :: " + response.body().toString());
       }

       @Override
       public void onFailure(Call<ResponseBody> call, Throwable t) {
         Log.d("MenuItems", "Exception :: " + t.toString());
       }
 });

但在“MenuItems”日志中,我没有收到 JSON 响应,它是这样的

MenuItems: Response :: retrofit2.Response@e292dd4

请仔细阅读我的帖子并建议我一些解决方案。

【问题讨论】:

标签: android json retrofit2


【解决方案1】:

尝试使用body().string() 而不是body().toString()

【讨论】:

  • @Salem 如何解析该字符串中存在的 Json 对象和 Json 数组
  • @Prabs 您可以使用您选择的任何库:gson、Jackson 甚至默认的 JSONObject:stackoverflow.com/a/9606629/1205368
  • @Salem 我已经完成了 - JSONObject jObject = new JSONObject(response.body().string()); 然后使用该 Json 对象来获取其中的数组和对象
  • @AhmedMousa 我认为它已在 Retrofit2 中删除
  • @AhmedMousa 试试 raw().body().string()
【解决方案2】:

使用Call&lt;JSONObject&gt;。这样你甚至不需要在你的项目中包含任何retrofit converters

【讨论】:

  • 这并不能完全回答问题。另外,如果 JSON 的反序列化是真正需要的呢?
  • 没错,我没有发现问题的on response body 部分。虽然,这仍然有效,但是对于反序列化,可以在响应回调中使用任何方法,尽管我承认大多数时候这不是最好的主意。
猜你喜欢
  • 2016-10-02
  • 2018-01-25
  • 2017-04-05
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多