How to use DataItem of Android Wear

android, android-wear-data-api, synchronization, wear-os

Solution

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

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();
    }
});

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.

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

Problem

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 ``` 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?

Original source

Related problems