2017-02-22 6 views
2

Ich habe dieses Firebase:Wie erhalten Sie Array-Daten auf Firebase?

The code

Ich versuche, mit diesem Code alle Fragen Daten zu erhalten:

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference questionsRef = database.getReference("questions"); 

questionsRef.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

     HashMap question = dataSnapshot.getValue(HashMap.class); 

     System.out.println(question.get("0")); 
    } 
} 

Aber ich bekomme die Fehlermeldung:

com.google.firebase.database.DatabaseException: Class java.util.HashMap has generic type parameters, please use GenericTypeIndicator instead

Ich habe einige Wege ausprobiert, aber das ist der letzte Fehler. Wie kann ich jede Frage und alle Fragen beantworten?

Antwort

0

Zunächst sollten Sie question Typ Map ändern, nicht HashMap (like @varjo mentioned)

Zweitens in Ihrem Code Sie den Wert erhalten, ist ein Schritt oben, wo es sein sollte. So sollte es so aussehen:

Map<String, String> question = dataSnapshot.child("options").getValue(Map.class); 

this helps

EDIT

Um Fragetext zu erhalten, verwenden diese:

String questionText = dataSnapshot.child("question").getValue(String.class); 

Note: for best practice, I think you should create a custom object that combine the question and options together

0
Map<String, String> question = dataSnapshot.child("options").getValue(Map.class); 

Take Array dieser Frage ..

0

Optionen sieht aus wie eine nummerierte Liste für mich, so müssen Sie nicht eine Karte verwenden, um seinen Inhalt zu bekommen.

GenericTypeIndicator<List<String>> gti = new GenericTypeIndicator<List<String>>() {}; 

String question = dataSnapshot.child("question").getValue(String.class); 
List<String> questionOptions = dataSnapshot.child("options").getValue(gti); 
0

„Optionen“ nicht eine Karte ist, ist es eine Liste oder ein Array. Tun Sie etwas wie das

GenericTypeIndicator<List<String>> genericTypeIndicator = new GenericTypeIndicator<List<String>>() {}; 
List<String> list = dataSnapshot.child("options").getValue(genericTypeIndicator); 
Verwandte Themen