2012-10-24 27 views
2

我根本找不到這個。假設我的產品序列化爲從服務器檢索到的JSON,並且一旦產品信息已被Android應用程序接收並存儲在本地文件系統中,我如何完成以下操作?Android - 只發送所需的json

比方說,我有一個服務器發送的產品列表(例如最高評價的產品或搜索結果等)。我希望能夠讓服務器只發送當前沒有存儲在設備上的對象的完整json數據,否則只是產品的id。我可以發送設備上存儲的產品列表,但顯然會破壞目的。我也可以從服務器發回產品ID列表,設備可以從那裏請求它需要的產品ID。這需要一個請求並將其轉換爲多個請求,因此也不是很理想。這是目前我能想到的唯一兩種選擇。

此外,它可能是產品json中的30個字段左右,1或2個可能已經改變(價格或評級)。如何在不發送整個產品或某些領域的情況下查看它是否發生了變化?目前,我正在使用json的md5發送產品ID,如果它匹配設備上的內容,則不發送,但如果兩個哈希不匹配,則不要發送。再次,我認爲這可能是最好的情況,但我不確定。

回答

2

你必須跟蹤你的應用在服務器上的狀態。這意味着你的應用程序應該登錄(或者做任何事情,讓服務器把它交給一個唯一的令牌用於知道這是特定的客戶端「實例」)。然後,您的應用程序必須告訴服務器它已有的ID(或從服務器獲取所有ID)。服務器應該始終注意發送給客戶端的ID(或通過應用程序記錄這些ID))。由於每次調用服務器都應該附帶令牌,因此服務器可以輕鬆知道您當時的狀態(除非您以其他方式註銷,超時或使令牌無效)。

1

你可以做的一件事是你可以分開通常一起變化的場的散列,例如,你可以有一個散列(price,rating)和另一個散列來描述對象本身。設備然後可以只請求它需要更新的一組字段。

你可以嘗試的另一件事是使用32位的unix時間戳而不是散列。假設你是一致的,並且你不會每秒更新一次以上的對象,與128位MD5總和相比,你可以節省一些帶寬。