android firebase多次检索数据

时间:2016-05-17 17:40:03

标签: android firebase

我现在正在做一个项目,应该是孩子们的数学教学应用程序。 我使用firebase作为我的数据库来保存用户名和密码,并保存问题及其答案。 我有一个问题,从数据库中检索问题和答案并将其显示在按钮和textview上,因为看起来单个值事件的监听器仅在类完成所有其他命令时触发,我需要使用此听取我的每一个问题。

我的数据库: enter image description here

到目前为止我的代码:

ArrayList <Integer> list = new ArrayList<Integer>();
    for (int i=1; i<11; i++) {
        list.add(new Integer(i));
    }
    Collections.shuffle(list);

    for (int i=0; i<5; i++) {
        ref2 = ref.child(list.get(i).toString());
        Questions.cont = false;
        getQuestionsFromDb(ref2);

        questionView.setText(Questions.question);
        button1.setText(Questions.ans1);
        button2.setText(Questions.ans2);
        button3.setText(Questions.ans3);
        button4.setText(Questions.ans4);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Questions.cont = true;
                int ans = getAns(Questions.question);
                Button b = (Button)v;
                int buttonText = Integer.parseInt(b.getText().toString());
                if(ans == buttonText) {
                    Questions.points++;
                }
            }
        });
            }
        questionView.setText(Questions.points);

        // end of for loop
    }
private void getQuestionsFromDb(Firebase ref2) {
    // TODO Auto-generated method stub

    ref2.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
        System.out.println("aaa");
            String question = (String) snapshot.child("question").getValue();
            String ans1 =  snapshot.child("ans1").getValue().toString();
            String ans2 =  snapshot.child("ans2").getValue().toString();
            String ans3 =  snapshot.child("ans3").getValue().toString();
            String ans4 =  snapshot.child("ans4").getValue().toString();
            Questions.question = question;
            Questions.ans1 = ans1;
            Questions.ans2 = ans2;
            Questions.ans3 = ans3;
            Questions.ans4 = ans4;
        }
        @Override
        public void onCancelled(FirebaseError arg0) {
            // TODO Auto-generated method stub
        }
    });
}

private int getAns(String ansString) {
    // TODO Auto-generated method stub
    String[] parts = ansString.split("\\b");
    String ans;
    if(parts.length == 5) {
        ans = parts[0] + parts[1] + parts[2] + parts [3] + parts [4];
    }
    else {
        ans = parts[0] + parts[1] + parts[2];
    }
    return Integer.parseInt(ans);
}

正如您所看到的,我还使用具有静态变量的外部类来保存问题和答案,并将其用于内部类。

我希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

在您的情况下,您应该添加更多侦听器addListenerForSingleValueEvent()以获取所需的所有数据或使用addValueEventListener重写您的逻辑。在这种情况下,您的数据将随时生效。