2016-02-06 24 views
0

在我工作的Android應用程序中,模型存儲在全局中,並且會通知活動有關創建,更新和刪除模型等更改。在收到服務器響應後調用相應的回調函數。如何在等待服務器響應時處理初始模型?

有一個主要活動列出模型和另一個活動來創建新的模型。從那裏,用戶可以填寫一些字段並點擊保存。這會觸發服務器請求來創建新模型。獲得響應後,服務器上的已驗證模型將添加到全局集合中,並執行通知回調。問題是等待響應時要做什麼。

  1. 我們可以阻止用戶界面顯示一個微調。但是這不是很響應,並導致糟糕的用戶體驗。
  2. 我們可以添加一個本地初步模型,並將其添加到全局集合並觸發通知回調。這將允許主要活動將其添加到列表中。在迴應後,我們更新或刪除初步模型,具體取決於請求的成功或失敗。然而,初步模型還沒有它的id,所以在集合中很難找到更新或刪除的內容。
  3. 在這種方法的基礎上,我們可以爲初始模型分配一個隨機的初始ID。但是,如果用戶已經與新模型交互,這可能會創建使用錯誤的初始ID的不明確的請求。

在等待服務器響應時,我們如何處理多個活動中的初步模型,並採取清晰和響應的方式?

回答

1

2中的最佳答案是讓客戶端創建ID。不要使用序列中的連續ID。使用128位的隨機UUID。然後,客戶可以隨機創建一個新的ID,並有幾乎0失敗的機會。

如果虛擬0不夠好,請讓客戶端創建一個臨時ID。然後讓服務器接受該ID,或發送包含臨時ID和永久ID的響應,以便客戶端可以將臨時ID重新映射爲新值。在客戶端和服務器之間創建的請求可以由客戶端重新發送或由服務器重新映射。

雖然真的 - 一個128位的隨機ID有這麼小的機會,你不必擔心它。地球上的每個人都可以創造出十億個模型,下次嘗試時碰撞機率不到10億分之一。

+0

我不相信偶然會產生相同的UUID。但攻擊者可以輕鬆地發送衝突ID的請求。任何人都可以評論是否檢查服務器中的衝突是否保存? – danijar

+0

如果您擔心發送其他人已有模型的UUID的攻擊者 - 您不用擔心由誰來生成身份證。在允許某人編輯它之前,請始終檢查數據的權限/所有權。 –

+0

那麼,任何用戶都可以發送創建請求。所以我必須檢查這些請求是否已經在使用中。否則,我可以很容易地在數據庫表中兩次使用相同的ID。對於攻擊者(甚至是錯誤編程的客戶端),它很容易造成碰撞。 – danijar

相關問題