阅读Firebase数据会返回null Android

时间:2018-04-07 22:57:49

标签: java android firebase firebase-realtime-database

public void RetreiveNewQuestions(){
    Random random = new Random();
    int questionInt1;
    questionInt1 = random.nextInt(2-1) + 1;
    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    FirebaseDatabase.getInstance().getReference().child("questions").child("animal").child("1").child("question").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
           String question1 = dataSnapshot.getValue(String.class);
           question[0] = question1;

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

这种方法应该随机读取问题,但首先出于测试目的,我试着看看它是否能读出一个问题,但是没有用。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);

    questionRef = FirebaseDatabase.getInstance().getReference("questions");
    category = "animal";
    RetreiveNewQuestions();

    String quizData[][] = {
            //Format, {Question, right answer, option1, option2, option3}
            {question[0], "Log", "Tree", "Knee"," Bee"},
            { "Potato", "Rar", "Laugh", "Test","Minute"}
    };

What my data looks like in Firebase

1 个答案:

答案 0 :(得分:0)

如果您只想获得第一个问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("questions").child("animal").child("1");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String question = dataSnapshot.child("questions").getValue(String.class);
        Log.d("TAG", question);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
ref.addListenerForSingleValueEvent(valueEventListener);

如果您想获得所有问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference animalRef = rootRef.child("question").child("animal");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String question = ds.child("question").getValue(String.class);
            Log.d("TAG", question);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
animalRef.addListenerForSingleValueEvent(valueEventListener);