Я пытаюсь синхронизировать данные со своего телефона (API 24) с часами Android Wear (API 25). Используя этот пример кода, я могу отправлять элементы данных успешно, однако, когда я запускаю код в цикле, элементы данных дублируются на часах. Он не дублируется, если я устанавливаю точку останова в цикле и прохожу через нее.
В качестве теста я создал кнопку, которая выполняет код синхронизации, и если я нажимаю кнопку быстро, элементы дублируются, но не в том случае, если я делаю паузу между каждым нажатием кнопки.
Я пробовал использовать SystemClock.sleep()
, чтобы приостановить цикл до 5 секунд. Это ненадежно, потому что одни элементы дублируются, а другие нет.
Этот код является обновлением Wearable.DataApi
, который устарел, но старый код работал нормально без дублирования.
PutDataMapRequest dataMap = PutDataMapRequest.create("/import");
dataMap.getDataMap().putString("title", "Title 1");
PutDataRequest request = dataMap.asPutDataRequest();
final Task<DataItem> task = Wearable.getDataClient(this).putDataItem(request);
task.addOnSuccessListener(new OnSuccessListener<DataItem>() {
@Override
public void onSuccess(DataItem dataItem) {
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
ОБНОВИТЬ:
Для теста я запустил этот код. В результате в часы передается только второй элемент данных. Если я закомментирую putDataItem
для второго теста 2, то отобразится первый тест. Помещение SystemClock.sleep
между ними по-прежнему приводит к передаче только второго элемента данных.
final PutDataMapRequest dataMap = PutDataMapRequest.create("/import");
dataMap.getDataMap().putString("title", "title1");
dataMap.getDataMap().putString("rss_url", "http://wwww.test1.com");
dataMap.getDataMap().putLong("time", new Date().getTime());
final PutDataRequest request = dataMap.asPutDataRequest();
Wearable.getDataClient(this).putDataItem(request);
final PutDataMapRequest dataMap2 = PutDataMapRequest.create("/import");
dataMap2.getDataMap().putString("title", "title2");
dataMap2.getDataMap().putString("rss_url", "http://wwww.test2.com");
dataMap2.getDataMap().putLong("time", new Date().getTime());
final PutDataRequest request2 = dataMap2.asPutDataRequest();
Wearable.getDataClient(this).putDataItem(request2);
ОБНОВЛЕНИЕ 2:
Что-то серьезно не так с последовательной отправкой данных с классом com.google.android.gms.wearable.Wearable
. Любая попытка отправить данные автоматически, более одного раза, вызывает дублирование на часах.
Собираюсь отправить запрос об ошибке в Google, и, надеюсь, он будет исправлен через пять лет.
Сообщение об ошибке отправлено здесь. Если вы столкнулись с этим, отметьте его.
urgent
, но результаты все те же. - person Kris B   schedule 08.03.2018