11

我想在手持设备和可穿戴设备之间同步偏好。我在手持应用程序上实现示例代码。

PutDataMapRequest dataMap = PutDataMapRequest.create("/count");
dataMap.getDataMap().putInt(COUNT_KEY, count++);
PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
    .putDataItem(mGoogleApiClient, request);
System.out.println(dataMap.getDataMap().getInt("COUNT_KEY"));//print 3

然后在可穿戴应用程序上实现以下代码。但是无法检索保存的计数。

 PutDataMapRequest dataMap = PutDataMapRequest.create("/count");
 int count = dataMap.getDataMap().getInt("COUNT_KEY");
 System.out.println(count);//print 0

我尝试了实际的安卓手持设备和安卓穿戴模拟器。我确认它们是通过使用 Android Wear 应用程序的演示卡连接的。

我还需要什么或者我误解了什么?

4

1 回答 1

19

使用该代码,您正在尝试创建第二个 put request,而不是读取先前存储的数据。这就是为什么它是空的。

访问先前存储的数据的方法是使用DataApi方法。例如,您可以使用以下命令获取所有存储的数据Wearable.DataApi.getDataItems()

PendingResult<DataItemBuffer> results = Wearable.DataApi.getDataItems(mGoogleApiClient);
results.setResultCallback(new ResultCallback<DataItemBuffer>() {
    @Override
    public void onResult(DataItemBuffer dataItems) {
        if (dataItems.getCount() != 0) {
            DataMapItem dataMapItem = DataMapItem.fromDataItem(dataItems.get(0));

            // This should read the correct value.
            int value = dataMapItem.getDataMap().getInt(COUNT_KEY);
        }

        dataItems.release();
    }
});

我已经使用过它并且它有效。但是,我自己也遇到了问题,因为我不知道使用Wearable.DataApi.getDataItem(). 所以我发布了这个问题。如果你只是测试,DataApi.getDataItems()应该就足够了。

另一种选择是用于DataApi.addListener()通知存储的更改。

于 2014-07-06T23:30:55.453 回答