У меня есть список из 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. Я понятия не имею, что происходит.Я также проверил это с 1 секундой ожидания между вызовами putDataItem (), и он работает как задумано.Метод onDataChanged вызывается 10 раз, а 10 полезных данных передаются.Но я не могу ждать одну секунду между каждым звонком.Кто-нибудь знает, что здесь происходит?