onStateConflict没有冲突

时间:2013-07-09 23:54:47

标签: android google-play-services

我在使用谷歌播放服务的AppStateClient时遇到问题。当我让下面的代码只在一个设备上运行时,我会按预期进入onStateLoaded - 但是当涉及另一个设备时,我会一直遇到冲突,而数据中没有冲突

    @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 个答案:

答案 0 :(得分:1)

这是按预期工作的。冲突并不意味着数据不同。在确定冲突时,数据本身被考虑在内。确定冲突的是另一个设备写入数据,因为该设备上次读取它。考虑一下:

  1. 设备A显示“Foo”
  2. 设备B读取“Foo”
  3. 设备A写入“Foo”
  4. 设备B写入“Foo”
  5. 在这种情况下,即使数据相同,设备B也会发生冲突(在步骤4之后的任何时间加载数据时都会发出信号)。不是因为数据不同,而是因为自上次读取数据以来发生了其他来源的写入

    如果从应用程序逻辑的角度来看,这不是冲突,那么只需通过调用resolveConflict解决它。