如何使用 Android Wear 的 DataItem如何使用、Android、DataItem、Wear

由网友(断了的弦)分享简介:我想在手持设备和可穿戴设备之间同步偏好.我在手持应用上实现了示例代码.I want to sync preference between handhelds and wearables. I implement sample code on handheld app.PutDataMapRequest dataMa...

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

I want to sync preference between handhelds and wearables. I implement sample code on handheld app.

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

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

And then implement below code on wearable app. But saved count can't be retrieved.

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

我在实际的安卓手持设备和安卓穿戴模拟器上进行了尝试.我通过 Android Wear 应用的演示卡确认它们已连接.

I tried in actual android handheld device and emulator of Android wear. I confirmed they are connected by using demo cards of Android Wear app.

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

What I need more or do I misunderstand something?

推荐答案

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

With that code, you are trying to create a second put request, not reading the previously stored data. That's why it's empty.

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

The way to access previously stored data is with the DataApi methods. For example, you can get all stored data with 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() 访问 特定 数据项的 Uri.所以我发布了这个问题.如果您只是在测试,DataApi.getDataItems() 应该就足够了.

I've used this and it works. However, I'm having a problem myself, as I don't know the Uri to access a specific data item with Wearable.DataApi.getDataItem(). So I posted this question. If you're just testing though, DataApi.getDataItems() should suffice.

另一种选择是使用 DataApi.addListener() 收到更改通知到存储.

Another option is to use DataApi.addListener() to be notified of changes to the storage.

阅读全文

相关推荐

最新文章