如何从Firebase数据库读取数据

时间:2018-09-27 10:58:09

标签: android firebase firebase-realtime-database

我想从Firebase数据库中读取所有问题的数据。例如对于问题1,我想将问题,答案和答案存储到三个变量中。我当前正在做的事情就是这里。

private FirebaseDatabase database=FirebaseDatabase.getInstance();
private DatabaseReference 
quizRef=database.getReference("Quiz").child("Questions");
quizRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot ds:dataSnapshot.getChildren())
            {
                ModelClass modelClass=new ModelClass();
                modelClass.setQues(ds.child("question1").getValue(ModelClass.class).getQues());
                modelClass.setAns(ds.child("question1").getValue(ModelClass.class).getAns());

                textViewQuestionText.setText(modelClass.getQues());
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            textViewQuestionText.setText("Error occurred");

        }
    });

enter image description here

3 个答案:

答案 0 :(得分:2)

经过测试。您不必检查像question1,question2等之类的键

       FirebaseDatabase    database = FirebaseDatabase.getInstance();
        DatabaseReference reference = database.getReference("Quiz/Questions");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot ds: dataSnapshot.getChildren()) {

                    ModelClass modelClass = (ds.getValue(ModelClass.class));
                    modelClass.getAns();
                    modelClass.getQes();
                    // fetch any key value pair
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

我建议使用Firebase生成的哈希键,而不要使用自己的问题(如问题1,问题2等)

Check this

答案 1 :(得分:1)

您可以使用以下代码直接使用Firebase数据库中的数据:

DatabaseReference q1Ref = quizRef.child("question1");
q1Ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String question = dataSnapshot.child("ques").getValue(String.class);
            String answer = dataSnapshot.child("ans").getValue(String.class);
            int ansBy = dataSnapshot.child("answeredBy").getValue(Integer.class);

            // now you can do what you want with the values stored in the variables
        }

        @Override
        public void onCancelled(DatabaseError error) {
            textViewQuestionText.setText("Error occurred");

        }
    });

答案 2 :(得分:0)

要从数据库读取或写入数据,您需要一个DatabaseReference实例:

private DatabaseReference mDatabase;
// ...
mDatabase = FirebaseDatabase.getInstance().getReference();

要在路径上读取数据并侦听更改,请使用addValueEventListener()或addListenerForSingleValueEvent()方法将ValueEventListener添加到DatabaseReference。

您可以使用onDataChange()方法读取给定路径上内容的静态快照,因为它们在事件发生时就已经存在。

有关更多信息,您可以refer to firebase docs