【问题标题】:How to get array data on Firebase?如何在 Firebase 上获取数组数据?
【发布时间】:2017-07-12 02:24:10
【问题描述】:
我有这个 Firebase:
我正在尝试使用此代码获取所有问题数据:
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:类
java.util.HashMap 有泛型类型参数,请使用
而是 GenericTypeIndicator
我尝试了几种方法,但这是最后一个错误。如何获取每个问题的数据和问题的所有选项?
【问题讨论】:
标签:
android
firebase
firebase-realtime-database
【解决方案1】:
"options" 不是映射,它是列表或数组。做这样的事情
GenericTypeIndicator<List<String>> genericTypeIndicator = new GenericTypeIndicator<List<String>>() {};
List<String> list = dataSnapshot.child("options").getValue(genericTypeIndicator);
【解决方案2】:
选项在我看来就像一个编号列表,所以不必使用地图来获取它的内容。
GenericTypeIndicator<List<String>> gti = new GenericTypeIndicator<List<String>>() {};
String question = dataSnapshot.child("question").getValue(String.class);
List<String> questionOptions = dataSnapshot.child("options").getValue(gti);
【解决方案3】:
首先,您应该将question 类型更改为Map,而不是HashMap (like @varjo mentioned)
其次,在您的代码中,您得到的值比应有的值高 1 步。所以应该是这样的:
Map<String, String> question = dataSnapshot.child("options").getValue(Map.class);
希望对你有帮助
编辑
要获取问题文本,请使用:
String questionText = dataSnapshot.child("question").getValue(String.class);
注意:为了获得最佳实践,我认为您应该创建一个自定义对象
将问题和选项结合在一起
【解决方案4】:
Map<String, String> question = dataSnapshot.child("options").getValue(Map.class);
拿这个问题的数组..