如何在Firebase上获取阵列数据?

时间:2017-02-22 06:58:50

标签: android firebase firebase-realtime-database

我有这个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有泛型类型参数,请使用   而是GenericTypeIndicator

我尝试了几种方法,但这是最后一次错误。我如何获得每个问题数据和问题的所有选项?

4 个答案:

答案 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,而不是HashMaplike @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);