我有一个清单,需要从掌上电脑发送到可穿戴设备的10个对象。发送对所有这些对象都完美,但是onDataChanged()仅被触发2次,似乎第一个是随机的。因此,我用相同的结果重新创建了完全相同的问题:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = findViewById(R.id.button);
mDataClient = Wearable.getDataClient(this);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i = 0; i < 10; i++) {
//own mock up class with string id of i to differ them
Model model = new Model(String.valueOf(i)
, "title"
, new Date().getTime());
sendDataToWear(model);
}
}
});
}
private void sendDataToWear(Model model) {
PutDataMapRequest putDataMapRequest = PutDataMapRequest.create("/my_path");
putDataMapRequest.getDataMap().putString("id", model.getId());
putDataMapRequest.getDataMap().putString("title", model.getTitle());
putDataMapRequest.getDataMap().putLong("timestamp", model.getTimeStamp());
PutDataRequest putDataRequest = putDataMapRequest.asPutDataRequest();
Task<DataItem> putDataTask = mDataClient.putDataItem(putDataRequest);
putDataTask.addOnSuccessListener(new OnSuccessListener<DataItem>() {
@Override
public void onSuccess(DataItem dataItem) {
Log.d(TAG, "onSuccess: dataitem");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: dataitem " + e.getMessage());
}
});
}
使用正确的有效负载调用onSuccess日志10次。 具有实现的OnDataChangeListener的可穿戴活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Wearable.getDataClient(this).addListener(this);
}
@Override
public void onDataChanged(@NonNull DataEventBuffer dataEventBuffer) {
for(DataEvent event : dataEventBuffer) {
if(event.getType() == DataEvent.TYPE_CHANGED) {
DataItem item = event.getDataItem();
if(item.getUri().getPath().compareTo("/my_path") == 0) {
DataMap map = DataMapItem.fromDataItem(item).getDataMap();
Log.d(TAG, "onDataChanged: name: " + map.getString("id"));
}
}
}
}
onDataChanged日志被调用2次,第一个总是不同,第二个总是9。我不知道发生了什么。我还对putDataItem()调用之间的等待时间进行了1秒的测试,它可以按预期工作。 onDataChanged方法被调用10次,并传递10个有效负载。但是我不能在每次通话之间等待一秒钟。有人知道这是怎么回事吗?
答案 0 :(得分:1)
所有请求都使用相同的路径创建,因此以后的请求会覆盖更早的请求-如果这种情况发生在将更早的请求发送到电话之前(可能的话),则只会收到最后一个请求。
要发送不同的项目,请在您的PutDataMapRequest.create()
通话中使用不同的路径。最好创建一条路径,以合理地区分每个项目(例如,以唯一ID结尾的项目,例如“ / my_path / [item_id]”)。