2013-07-09 4 views
1

У меня возникли проблемы с AppStateClient из сервисов Google Play. Когда я пусть этот код запуска только на одном устройстве я получаю в 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 читает "Foo"
  2. Устройство B читает "Foo"
  3. Устройство A пишет "Foo"
  4. Устройство B пишет "Foo"

В этом случай, хотя данные одинаковы, устройство B получит конфликт (который будет сигнализироваться при загрузке данных в любое время после шага 4). Не потому, что данные разные, а потому, что запись из другого источника произошла с момента последнего последнего чтения данных.

Если с точки зрения логики вашего приложения это не считается конфликтом, тогда просто разрешите его, вызвав resolveConflict.

Смежные вопросы