我想在手持设备和可穿戴设备之间同步偏好。我在掌上电脑上实施了sample code。
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的模拟器。我确认他们使用Android Wear app的演示卡进行连接。
我需要更多或者我误解了什么?
答案 0 :(得分:19)
使用该代码,您尝试创建第二个放置请求,而不是读取先前存储的数据。这就是为什么它是空的。
访问以前存储的数据的方法是使用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()
访问特定的数据项。所以我发布了this question。如果您只是进行测试,DataApi.getDataItems()
就足够了。
另一个选择是使用DataApi.addListener()
通知存储更改。