【发布时间】: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