2017-02-22 25 views
2

У меня есть этот Firebase:Как получить данные массива на Firebase?

The code

Я пытаюсь получить все данные вопросы с этим кодом:

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

Но я получаю ошибку:

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

Я пробовал несколько способов, но это последняя ошибка. Как я могу получить данные каждого вопроса и все варианты вопросов?

ответ

0

Во-первых, вы должны изменить question типа в Map, не HashMap (like @varjo mentioned)

Во-вторых, в своем коде вы получите значение 1 ступень выше, где она должна быть. Так оно и должно быть, как это:

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

Надеется, что это помогает

EDIT

Чтобы получить текст вопроса, используй:

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

Возьмите массив этого вопроса ..

0

Опции выглядят как пронумерованный список, поэтому не нужно использовать карту, чтобы получить ее содержимое.

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

"options" - это не карта, это список или массив. Сделайте что-нибудь подобное

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

 Смежные вопросы

  • Нет связанных вопросов^_^