2

我根本想不通这个。假设我已从服务器检索序列化为 JSON 的产品,并且一旦 Android 应用程序接收到产品信息,它就会本地存储在文件系统上,我将如何完成以下操作?

假设我有一个服务器发送的产品列表(例如评价最高的产品或搜索结果等)。我希望能够让服务器只发送当前未存储在设备上的对象的完整 json 数据,否则只发送产品的 id。我可以发送存储在设备上的产品列表,但这显然会违背目的。我也可以只从服务器发回产品 ID 列表,设备可以从那里请求它需要的那些。这需要一个请求并将其转换为多个请求,因此也不理想。这是我目前能想到的仅有的两个选项。

此外,在产品 json 中的 30 个左右的字段中,可能有 1 或 2 个字段发生了变化(价格或评级)。在不发送整个产品或某些字段的情况下如何确定它是否已更改?目前我正在发送带有 json 的 md5 的产品 ID,如果它与设备上的内容匹配,则不要发送,但如果两个哈希值不匹配,则不要发送。同样,我认为这可能是最好的情况,但我不确定。

4

2 回答 2

2

您必须在服务器上跟踪您的应用程序的状态。这意味着您的应用程序应该登录(或执行任何允许服务器向其传递用于知道这是特定客户端“实例”的唯一令牌的事情)。然后您的应用程序必须告诉服务器它已经拥有的 ID(或从服务器获取所有 ID)。服务器应始终记录发送给客户端的 ID(或记录这些由应用程序告知的 ID))。由于对服务器的每次调用都应附带令牌,因此服务器可以很容易地知道您当时的状态(除非您以任何其他方式注销、超时或使令牌无效)。

于 2012-10-24T22:31:19.187 回答
1

您可以做的一件事是您可以将通常一起更改的字段的散列分开,例如,您可以为(价格,评级)设置一个散列,为描述对象本身的字段设置另一个散列。然后设备可以只请求它需要更新的字段集。

您可以尝试的另一件事是使用 32 位 unix 时间戳而不是哈希。假设您保持一致并且每秒更新对象不超过一次,与 128 位 MD5 总和相比,您将节省一些带宽。

于 2012-10-24T22:31:53.810 回答