Android Wearable.DataApi.getDataItem中的空数据项
我的可穿戴设备有一个Android Wearable.DataApi.getDataItem中的空数据项,android,wear-os,android-wear-data-api,android-googleapiclient,Android,Wear Os,Android Wear Data Api,Android Googleapiclient,我的可穿戴设备有一个活动,它实现DataApi。DataListener,此活动向手持设备发送onConnected()中的消息,以更新请求的数据。当手持设备接收到此消息时,它从服务器获取数据,并将其传递到数据映射。此DataMap与以下代码一起发送: NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await(); for(Node node : node
活动
,它实现DataApi。DataListener
,此活动
向手持设备发送onConnected()
中的消息,以更新请求的数据。当手持设备接收到此消息时,它从服务器获取数据,并将其传递到数据映射
。此DataMap
与以下代码一起发送:
NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
for(Node node : nodes.getNodes()) {
PutDataMapRequest dataRequest = PutDataMapRequest.create(mPath);
dataRequest.getDataMap().putDataMapArrayList("/path", mData);
PutDataRequest request = dataMapRequest.asPutDataRequest();
DataApi.DataItemResult result = Wearable.DataApi.putDataItem(mGoogleApiClient, request).await();
if(result.getStatus().isSuccess()) {
Log.d(TAG, "DataMap: " + mData + " sent to: " + node.getDisplayName());
}
}
这段代码似乎工作正常,因为它输出到logcat:“DataMap:sent to:7f7fbd33”
。然后手持可穿戴设备在异步任务中使用以下代码接收此数据:
NodeApi.GetLocalNodeResult localNode =
Wearable.NodeApi.getLocalNode(getGoogleApiClient()).await();
Uri dataUri = new Uri.Builder().scheme(PutDataRequest.WEAR_URI_SCHEME)
.authority(localNode.getNode().getId()).path("/path").build();
Log.d(dataUri.toString());
DataApi.DataItemResult itemResult =
Wearable.DataApi.getDataItem(mGoogleApiClient, dataUri).await();
Log.d(TAG, itemResult.getStatus() + " dataItem=" + dataItem.getDataItem();
if(itemResult.getStatus().isSuccess() && itemResult.getDataItem() != null) {
...
}
路径似乎正确:wear://7f7fbd33/path
,但结果是:状态{statusCode=SUCCESS,resolution=null}dataItem=null
。为什么它会给我一个空项?在监视设备上,为什么要获取localNode并使用它构造dataUri?创建数据项时,其Uri包含创建者的nodeId,因此,如果在移动设备上添加数据项,其Uri包含移动设备的nodeId,因此当您要在其他节点上搜索这些项时,应使用创建者的nodeId(在您的情况下为移动设备)并且不应该使用接收方的本地nodeId来构造uri,请参阅。在许多情况下,您不知道创建者的id,因此您将使用()和部分uri,仅从路径构建。此外,最好使用onDataChanged()回调,然后根据消息路径过滤消息。我有点困惑;第二个代码段仍在手持设备上运行?你是说手表吗?@AliNaddaf对不起,是的,我是说手表。你说的是部分Uri,如wear:/path
?我已经试过了,省略了.authority()
。类似这样:Uri.Builder().scheme(PutDataRequest.WEAR\u Uri\u scheme).path(“/path”).build()
,但我得到了类似的结果<代码>状态{statusCode=ERROR,resolution=null}deataItem=null
。另外,onDataChanged()
仅在数据实际更改时有效,并且我希望即使数据未更改也能获取数据。部分uri与getDataItem()不兼容,您应该使用getDataItems()才有效!我将代码切换到DataItemBuffer results=Wearable.DataApi.getDataItems(mGoogleApiClient.await();DataMapItem dataMap=DataMapItem.fromDataItem(results.get(0))代码>。非常感谢。现在有点粗糙,但至少我有一些东西要处理。@Bryan如果不检查结果,你就会犯错误。get(0)在其uri中有正确的路径