我有这个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:Class java.util.HashMap有泛型类型参数,请使用 而是GenericTypeIndicator
我尝试了几种方法,但这是最后一次错误。我如何获得每个问题数据和问题的所有选项?
答案 0 :(得分:1)
选项看起来像是一个编号列表给我,所以不必使用地图来获取它的内容。
GenericTypeIndicator<List<String>> gti = new GenericTypeIndicator<List<String>>() {};
String question = dataSnapshot.child("question").getValue(String.class);
List<String> questionOptions = dataSnapshot.child("options").getValue(gti);
答案 1 :(得分:0)
首先,您应该将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);
注意:为了最佳实践,我认为您应该创建一个自定义对象 将问题和选项结合在一起
答案 2 :(得分:0)
public Converter(){
....
//Attaching the metric listener to each JTextField
//you pass this to the MetricListener
metersTxt.addActionListener(new MetricListener(this));
feetTxt.addActionListener(new MetricListener(this));
milesTxt.addActionListener(new MetricListener(this));
inchesTxt.addActionListener(new MetricListener(this));
cmTxt.addActionListener(new MetricListener(this));
kmTxt.addActionListener(new MetricListener(this));
获取此问题的数组..
答案 3 :(得分:0)
&#34;选择&#34;不是地图,它是列表或数组。做这样的事情
GenericTypeIndicator<List<String>> genericTypeIndicator = new GenericTypeIndicator<List<String>>() {};
List<String> list = dataSnapshot.child("options").getValue(genericTypeIndicator);