2013-07-09 36 views
1

我遇到了來自Google Play服務的AppStateClient問題。當我讓下面運行的代碼只有一臺設備上,我到onStateLoaded預期 - 但在另一個裝置參與我得到衝突所有的時間,而不存在數據衝突onStateConflict無衝突

@Override 
    public void onSignInSucceeded() { 
     Log.i("", "StatCount" + playHelper.getAppStateClient().getMaxNumKeys()); 
     playHelper.getAppStateClient().updateState(0, "test".getBytes()); 
     playHelper.getAppStateClient().loadState(new OnStateLoadedListener() { 
      @Override 
      public void onStateLoaded(int i, int i2, byte[] bytes) { 
       Log.i("AppStateTest","load {" + new String(bytes) +"}"); 
      } 

      @Override 
      public void onStateConflict(int i, String s, byte[] bytes, byte[] bytes2) { 
       Log.i("AppStateTest","conflict " + new String(bytes) +" <> " + new String(bytes2)); 
      } 
     },0); 
    } 

輸出:

I/AppStateTest(4173): conflict test <> test 

回答

1

這是按預期工作的。衝突並不意味着數據是不同的。在確定衝突時,數據本身是而不是。什麼決定了衝突是另一個設備寫入數據,因爲該設備上次讀取它。試想一下:

  1. 設備A寫着 「富」
  2. 設備B讀 「富」
  3. 設備A寫道: 「富」
  4. 設備B寫道: 「富」

在這即使數據相同,設備B也會發生衝突(在步驟4之後的任何時候加載數據時都會發出衝突)。不是因爲數據不同,而是因爲自上次讀取數據後發生其他來源的寫入

如果從您的應用邏輯的角度來看,這不被視爲衝突,那麼只需通過調用resolveConflict來解決它。