Нет необходимости подключать двух слушателей, чтобы получить эти два значения.Один слушатель может решить вашу проблему.Чтобы решить эту проблему, используйте следующие строки кода:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("markers").child("m-1");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
double lat = dataSnapshot.child("latit").getValue(Double.class);
double lon = dataSnapshot.child("longit").getValue(Double.class);
Log.d(TAG, lat + ", " + lon);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
ref.addListenerForSingleValueEvent(valueEventListener);
Как видите, оба значения извлекаются из объекта DataSnapshot
.Обе переменные lat
и lon
будут доступны только внутри обратного вызова, внутри onDataChange()
из-за асинхронного поведения этого метода.Если вы хотите использовать их вне, я рекомендую вам посмотреть последнюю часть моего ответа из этого поста , в котором я объяснил, как это можно сделать с помощью пользовательского обратного вызова.Вы также можете взглянуть на это видео для лучшего понимания.