Как использовать DataItem для Android Wear

Я хочу синхронизировать предпочтение между карманными компьютерами и носимыми. Я реализую образец кода на портативном приложении.

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 handheld устройстве и эмуляторе износа Android. Я подтвердил, что они связаны с использованием демо-карт Android Wear.

Что мне нужно больше или я чего-то не понимаю?

Ответ 1

С помощью этого кода вы пытаетесь создать второй запрос на размещение, не считая ранее сохраненные данные. Вот почему он пуст.

Способ доступа к ранее сохраненным данным относится к методам 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();
    }
});

Я использовал это, и он работает. Однако у меня сама проблема, так как я не знаю, как Uri может получить доступ к определенному элементу данных с помощью Wearable.DataApi.getDataItem(). Поэтому я разместил этот вопрос. Если вы просто тестируете, DataApi.getDataItems() должно быть достаточно.

Другой вариант - использовать DataApi.addListener(), чтобы получать уведомления об изменениях в хранилище.