Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用WearApi数据同步具有相同Uri的多个数据项_Android_Wear Os_Android Wear Data Api - Fatal编程技术网

Android 使用WearApi数据同步具有相同Uri的多个数据项

Android 使用WearApi数据同步具有相同Uri的多个数据项,android,wear-os,android-wear-data-api,Android,Wear Os,Android Wear Data Api,在移动设备上,通过服务,我使用相同的路径使用以下代码更新位图资源: PutDataMapRequest dataMap = PutDataMapRequest.create("/result/1"); dataMap.getDataMap().putString(FIELD_NAME, name); if(bitmap != null) { Asset asset = createAssetFromBitmap(bitmap); dataMap.getDataMap().putA

在移动设备上,通过服务,我使用相同的路径使用以下代码更新位图资源:

PutDataMapRequest dataMap = PutDataMapRequest.create("/result/1");
dataMap.getDataMap().putString(FIELD_NAME, name);
if(bitmap != null) {
    Asset asset = createAssetFromBitmap(bitmap);
    dataMap.getDataMap().putAsset(FIELD_IMAGE, asset);
}
PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
        .putDataItem(mGoogleApiClient, request);
DataApi.DataItemResult result = pendingResult.await(5L, TimeUnit.SECONDS);
@Override
protected void onStop() {
    if ((mGoogleApiClient != null) && mGoogleApiClient.isConnected()) {
        Wearable.DataApi.removeListener(mGoogleApiClient, WearIpCamActivity.this);
        mGoogleApiClient.disconnect();
    }
    mIsConnected = false;
现在它第一次运行时,我得到一个dataEvent。但是,下次运行它时,我会得到两个具有相同Uri的dataEvents,一个是旧的,一个是新的。等等

我认为在PutDatMapRequest.create()中使用相同的路径只需更新DataApi同步存储中的数据,然后进行同步

我尝试过Wearable.DataApi.deleteDataItems(),但这只是给了我一个更改和删除事件的大列表,所有事件都具有相同的Uri


随着时间的推移,我如何避免在我的可穿戴设备上加载数据事件?

日期项目是唯一的完整uri,其中包括第一次创建项目的主机。您可能有多个具有相同路径的项目,但每个项目都有一个唯一的主机


因此,如果您在一台主机上创建一个项目,然后在另一台主机上获取/onDataChanged,那么您应该修改并放置该项目的DataItem,而不是创建一个新的DataItem。我有以下代码:

PutDataMapRequest dataMap = PutDataMapRequest.create("/result/1");
dataMap.getDataMap().putString(FIELD_NAME, name);
if(bitmap != null) {
    Asset asset = createAssetFromBitmap(bitmap);
    dataMap.getDataMap().putAsset(FIELD_IMAGE, asset);
}
PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
        .putDataItem(mGoogleApiClient, request);
DataApi.DataItemResult result = pendingResult.await(5L, TimeUnit.SECONDS);
@Override
protected void onStop() {
    if ((mGoogleApiClient != null) && mGoogleApiClient.isConnected()) {
        Wearable.DataApi.removeListener(mGoogleApiClient, WearIpCamActivity.this);
        mGoogleApiClient.disconnect();
    }
    mIsConnected = false;
但是,由于我从中复制/粘贴了loadBitmapFromAsset,我忘了仔细检查它,发现其中有行mGoogleApiClient.disconnect()

这阻止了我的if块在onStop中执行,所以我的DataApi侦听器没有被删除。下次我运行我的应用程序时,我现在注册了两次相同的回调,对同一数据项调用了两次OnDataChanged


从loadBitmapFromAsset中删除mgoogleAppClient.disconnect()解决了我的问题。

不幸的是,正如问题中所述,我的URI在每个项目中都是相同的(主机是相同的)。