Moja baza danych w czasie rzeczywistym FireBase została zbudowana przez załadowanie obiektu Hashmap Java Class. W mojej aplikacji Studio Android Próbuję napisać metodę, która zajmuje ciąg (klucz) jako wejście, przeszukuje bazy danych, a jeśli ciąg zostanie znaleziony, zwraca powiązany pływak (wartość), w przeciwnym razie powróci 0. Jak mogę to zrobić? Każda pomoc byłaby naprawdę doceniana!

Edytuj: Starałem się przestrzegać sugestii, dostosowując je do mojego konkretnego przypadku, ale jeszcze nie udało mi się rozwiązać problemu.
Napisałem następujący kod w zakresie zasadnici:

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
    ...
}

Jeśli wystąpią pierwsze tosty, wyświetlana jest prawidłowa wartość wewnątrz tempValue, ale jeśli zdezona drugi tosty, pokazano wartość tempValue jest domyślnie (0.0). czego mi brakuje?

2
I'm D. 21 marzec 2020, 20:53

1 odpowiedź

Najlepsza odpowiedź

Musisz użyć addValueEventListener, aby pobrać dane z bazy danych:

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();
    }
})

Tutaj można dodać odniesienie do węzła roota, a następnie zapytanie przy użyciu equalTo(), aby sprawdzić, czy name = peter istnieje w bazie danych i zwróć wartość pływaka.

Powinieneś przeczytać przewodnik:

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

1
Peter Haddad 21 marzec 2020, 19:16