Моя база данных Firebase Realtime была создана путем загрузки объекта класса Java HashMap. В моем приложении Android Studio я пытаюсь написать метод, который принимает в качестве входных данных строку (ключ), выполняет поиск в базе данных и, если строка найдена, возвращает соответствующее значение типа Float (значение), в противном случае возвращается 0 . Как я могу это сделать? Любая помощь будет очень признательна!
РЕДАКТИРОВАТЬ: Я пытался следовать предложениям, адаптируя их к моему конкретному случаю, но мне пока не удалось решить проблему.
Я написал следующее код в MainActivity:
DatabaseReference myRef;
Float tempValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
myRef = FirebaseDatabase.getInstance().getReference("myRoot");
tempValue=0f;
...
}
public void retrieveValueFromDatabase(String childName, final MainActivity activity){
myRef.child(childName).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Float value=dataSnapshot.getValue(Float.class);
if (value==null){
value=0f;
}
activity.tempValue=value;
//First Toast
//Toast.makeText(activity,"tempValue = "+tempValue.toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
public void useValues(){
retrieveValueFromDatabase(childName,this);
//Second Toast
//Toast.makeText(this,"tempValue = "+tempValue.toString(), Toast.LENGTH_LONG).show();
//code using tempValue from here
...
}
Если я раскомментирую первый тост, будет показано правильное значение внутри tempValue
, но если я раскомментирую второй тост, показанное значение tempValue
будет значением по умолчанию ( 0.0). Чего мне не хватает?