Дано: Приложение работающее с firebase.
Проблема: Приложение падает при первом запуске если нет интернета (т.к. не успевает кэшировать базу с интернета). Поясню более подробнее приложение реализовано так, что при первом запуске в базе создается анонимный пользователь и если после отключить интернет, то приложение работает без проблем, но если это первый запуск и нет интернета падает с ошибкой NPE (т.к. user null, что и так понятно, нет инета не может зарегистрироваться анонимно)
Вопрос: Как можно реализовать поддержку оффлайн режима при первом запуске приложения и обязательно отсутствии интернета
Дополнительно: это все делал как написано в гайдах
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
DatabaseReference scoresRef = FirebaseDatabase.getInstance().getReference("scores");
scoresRef.keepSynced(true);
Решил проблему следующим образом:
При первом запуске без интернета user null (т.к. нет интернета), создаю своего локального пользователя
@NonNull
private String getUid() {
String userID;
if (user == null) {
userID = UUID.randomUUID().toString();
} else {
userID = user.getUid();
}
Log.d(LOG_TAG, "userID = " + userID);
return userID;
}
При последующих запусках приложения проверяю, если есть интернет и первый запуск был без интернета, то происходит анонимная авторизация и копирование локальных данных в бд, после этого удаляю старую бд скопировав все данные из нее в новую
public void moveFirebaseRecord(final DatabaseReference fromPath, final DatabaseReference toPath) {
fromPath.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
toPath.setValue(dataSnapshot.getValue(), new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null) {
Log.d(LOG_TAG, "moveFirebaseRecord() failed. firebaseError = " + databaseError);
} else {
fromPath.removeValue();// deleteAll from oldDB
Log.d(LOG_TAG, "moveFirebaseRecord() Great success!");
}
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Интересует как вывести динамическую таблицу из БД на GUI - формуИспользовал интерфейс "AbstractTableModel"
Подскажите как можно передать json с фронта в spring MVC контроллер: класс:
Допустим если мы объявим конструктор, то он будет возвращать нам некоторую информацию, и мы будем знать какую, а если этого не делать?