2016-10-22 4 views
0

Я включил setPersistenceEnabled(true), то что-то случилось по ошибке, и узел, который, как предполагается, теперь имеет детей, нет;Firebase: Как принудительно извлекать новые данные для одного конкретного узла.

Узел был в форме:

Nodes : { 
     concernedNode : { 
         child : "data", 
         child2 : "data" 
     } 
    } 

После arror, то concernedNode изменен:

concernedNode : true 

И в Java, я получаю эти данные следующим образом:

concernedNodePojo pojo = dataSnapshot.getValue(concernedNodePojo.class); 

Как вы можете видеть, если это связаноNode теперь является логическим, это порождает e xception где concernedNodePojo не может быть преобразован в булево.

Теперь проблема в том, что это уже в кеше, если 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()); 
} 
+0

Я на самом деле придется написать собственный блок кода, как тот, который вы публикуемую как я с помощью FirebaseListAdapter, но использовал пользовательский код, например по этому вопросу. – Relm

Смежные вопросы