#android #firebase #firebase-realtime-database
#Android #firebase #firebase-realtime-database
Вопрос:
Я бы сравнил значение с дочерним элементом моей базы данных Firebase в реальном времени, но я не знаю, как это сделать. Структура моей базы данных:
Это код, который я написал:
email = loadPreferences();
mAuth = FirebaseAuth.getInstance();
FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference myRef = database.getReference().child("users");
myRef.orderByChild("email").equalTo(email).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.getValue() != null) {
//loop through the keys
for(DataSnapshot datasnap : snapshot.getChildren()) {
if(!email.equalsIgnoreCase("")) {
myRef.child("users").child("email").child("address").setValue(getAddress());
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
Я пробовал с помощью отладчика, но когда он достиг «orderByChild ()», он пропускает все и переходит к концу. Кто-нибудь может мне помочь? Заранее спасибо
Ответ №1:
Данные загружаются из Firebase асинхронно, потому что их необходимо загружать из облака. Вместо того, чтобы блокировать приложение для ваших пользователей, Firebase вместо этого загружает данные в фоновом режиме и позволяет вашему основному коду продолжаться, что и происходит, когда вы просматриваете код.
Вместо пошагового выполнения кода поместите точку останова в первой строке внутри onDataChange
и позвольте коду выполняться. Затем, когда данные будут доступны, отладчик достигнет вашей точки останова, и вы сможете продолжить отладку.
Вы также должны реализовать onCancelled
, поскольку теперь вы игнорируете возможные проблемы. Как минимум, этот метод должен быть:
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
Комментарии:
1. Большое вам спасибо, теперь я вижу, что отладчик не пропускает инструкции, и я добавил реализацию onCancelled, как вы предложили. Если в моей пользовательской модели нет атрибута, подобного address, лучше ли мне добавить его или я могу добавить напрямую, как я опубликовал?