我很感激任何洞察力,因为已经尝试了所有已经使deleteDataItems工作的东西,但它没有。
我已经实现了一个非常简单的场景,即在我的主应用程序中创建新数据项(ArrayList)并使用Data API将其传递给可穿戴客户端。
以下是一些代码段:
public void SyncDataItemsMainApp()
{
if (mGoogleApiClient==null){mGoogleApiClient.connect();}
ArrayList<String> myList;
myList = new ArrayList<String>();
myList.add(new String(strValue)); // I add different set of values each time so it could be anything.
//For simplicity lets assume I add "Books" and "Pens"
PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/mylistitem");
putDataMapReq.getDataMap().putLong(ACTION_TIME_STAMP, new Date().getTime());
putDataMapReq.getDataMap().putStringArrayList("com.myapp.example",myList);
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
Wearable.DataApi.deleteDataItems(mGoogleApiClient,putDataMapReq.getUri()); //I use this line to delete DataItems which were created in the past as I do not want to store all variables on the cloud but only the current ones in myList
Wearable.DataApi.putDataItem(mGoogleApiClient, putDataReq);
}
这是可穿戴的OnDataChanged“
@Override
public void onDataChanged(DataEventBuffer dataEvents)
{
// TODO Auto-generated method stub
for (DataEvent event : dataEvents)
{
// DataItem changed
DataItem item = event.getDataItem();
if (event.getType() == DataEvent.TYPE_CHANGED)
{
if (item.getUri().getPath().compareTo("/mylistitem") == 0)
{
DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();
ArrayList<String> myListItems =dataMap.getStringArrayList("com.myapp.example");
populateWearableList(myListItems);
}
}
}
}
现在的问题是,每次我在可穿戴设备上解析一个arrayList时,它总是包含我在主应用程序中添加到Array中的所有值。正如我上面提到的,我只想存储最后一组值包含在最后一个调用中。因此,似乎DeleteDataItems实际上根本不起作用。一个有趣的事情是,在蓝牙模式的调试中,我只能看到最后一组值,但是一旦我的应用程序&amp;可穿戴设备连接到云端,它会创建相同值的其他实例,这非常令人困惑。
任何帮助都非常受欢迎,因为我准备使用DataAPI作为已经尝试的所有内容。
答案 0 :(得分:1)
我发现原因是DataApi Listener在app处于后台模式时没有停止。我不得不将所有Data Api调用放入一个单独的WearableListenerService中,一切都开始正常工作。我希望这可以在文档的某个地方调出来。