Android - 只发送必需的json

时间:2012-10-24 22:19:22

标签: java android json serialization deserialization

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以做的一件事是,您可以分离通常一起改变的字段的哈希值,例如:你可以有(价格,评级)的哈希和描述对象本身的字段的另一个哈希。然后,设备只能请求更新所需的字段集。

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