Как я могу прочитать значения из базы данных Firebase Realtime с помощью метода Java в AndroidStudio? - PullRequest
1 голос
/ 21 марта 2020

Моя база данных 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). Чего мне не хватает?

1 Ответ

1 голос
/ 21 марта 2020

Вам нужно использовать addValueEventListener для извлечения данных из базы данных:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("myRoot").orderByChild("name").equalTo("peter");
ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i("Database", dataSnapshot.child("floatValue").getValue(Long.class));
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
})

Здесь вы добавляете ссылку на узел root, затем запрашиваете, используя equalTo(), чтобы проверить, если name = peter существует в базе данных и возвращает значение с плавающей точкой.

Вы должны прочитать руководство:

https://firebase.google.com/docs/database/android/read-and-write

...