Как использовать 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 портативное устройство и эмулятор износа 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() получать уведомления об изменениях в хранилище.

Другие вопросы по тегам