【问题标题】:How to make multiple requests from response with Volley?如何使用 Volley 从响应中发出多个请求?
【发布时间】:2015-01-28 09:15:30
【问题描述】:

我一直在使用 Volley 向我的 api 发出请求。到目前为止,一切都很顺利。我反序列化 JSON 响应并将对象缓存到我的数据库中,然后查询我的数据库以显示对象的数据。但是,如果我的回复是这样的:

{
  "Author": {
    "name": "John Doe",
    "Books": [
      {
        "url": "www.myapi.com/book/1"
      },
      {
        "url": "www.myapi.com/book/2"
      },
      {
        "url": "www.myapi.com/book/3"
      }
    ],
    "Articles": [
      {
        "url": "www.myapi.com/article/1"
      }
    ]
  }
}

url 是实际对象的 api 端点。为了获得我的观点所需的所有信息,我将不得不执行一个 for 循环并再发出 4 个 api 请求以通过 Books 和 Articles 对象获取。我不确定实现这一目标的最佳方法是什么。在请求完成之前,我无法查询我的数据库,并且无法知道最后一个请求何时完成。

这似乎很常见,但我还没有遇到任何处理这种情况的东西。如何做到这一点?

【问题讨论】:

  • 我认为您不必提出多个请求。如果一切都在同一个流/文件中,只需使用 JSONObject 或/和 JSONArray 调整您的解析逻辑。或者使用 Gson 和注释,您还可以将您的 json 自动解析为对象。编辑:对于所有这些 url,你应该只在应用程序需要它时使用它们(例如:用户想看一篇文章:你现在而不是之前下载它)
  • “我将不得不执行一个 for 循环并再发出 4 个 api 请求”:我强烈建议您更改您的 web 服务以返回正确的信息而不是指向它的链接。拨打这么多电话非常昂贵,而且移动设备上的资源有限。我还建议从对象中读取信息(或同时)将其保存到数据库中,等待插入信息以在之后立即查询数据库也效率不高。
  • 我同意@2Dee,很遗憾我无法更改网络服务。
  • 那么听从 An-droid 的建议可能是你最好的选择。将 url 保存在 db 中并按需使用。但它仍然会很丑。上次这种情况发生在我身上,我让 API 提供者更改了他的 WS,对性能和 UX 的影响太大,无法拥有一个可用的应用程序。

标签: android json android-volley


【解决方案1】:

响应对 UX 不利,因为您需要请求 N 次才能向用户显示某些内容。

如果您可以更改响应,我建议您这样做。

顺便说一句,您可以使用EventBus 将对象从 Volley 线程发送到主线程,这样您就可以在每次完成请求时更新 UI。

【讨论】:

  • EventBus 看起来很有趣。我一定会看看它,看看它在这种情况下会如何工作。
猜你喜欢
  • 2019-09-10
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 2018-12-18
  • 2020-02-04
相关资源
最近更新 更多