#android #firebase #firebase-realtime-database #persistence
#Android #firebase #firebase-база данных в реальном времени #постоянство
Вопрос:
Я включил setPersistenceEnabled(true)
, затем что-то произошло по ошибке, и узел, который, как предполагается, имеет дочерние элементы, теперь не;
Узел был в форме :
Nodes : {
concernedNode : {
child : "data",
child2 : "data"
}
}
После ошибки concernedNode изменился на :
concernedNode : true
И в java я получаю эти данные следующим образом :
concernedNodePojo pojo = dataSnapshot.getValue(concernedNodePojo.class);
Как вы можете видеть, если concernedNode теперь является логическим значением, это вызывает исключение, в котором concernedNodePojo не может быть преобразован в Boolean.
Теперь проблема в том, что это уже в кэше, если setPersistenceEnabled(false)
все будет работать нормально, но затем, если setPersistenceEnabled(true)
, приложение отключается, потому что нет способа удалить автономные данные.
Я попытался setPersistenceEnabled(false)
затем извлечь новые данные, чтобы можно было перезаписать автономные данные, но это не тот случай. Данные в автономном режиме проверяются, и приложение завершает работу.
Ответ №1:
Самый простой способ — вручную удалить данные приложения или переустановить приложение.
Программно лучше всего поддерживать сохраняемость включенной и извлекать данные без их синтаксического анализа в вашем POJO. Просто подключите прослушиватель, который ничего не делает в своем onDataChange()
или, если вам интересно посмотреть, есть ли у него новые данные, анализирует снимок без преобразования его в concernedNodePojo
.
Например:
public void onDataChange(DataSnapshot snapshot) {
System.out.println("Got " snapshot.getKey());
System.out.println("Got " snapshot.child("child").getValue());
}
Комментарии:
1. На самом деле мне придется написать пользовательский блок кода, подобный тому, который вы опубликовали, поскольку я использовал FirebaseListAdapter, но использовал пользовательский код в качестве примера по этому вопросу.