0
私は今、子供のための数学の教えるアプリであるはずのプロジェクトをやっています。 私は自分のデータベースとしてfirebaseを使ってユーザ名とパスワードを保存し、質問とその回答を保存しています。 質問とデータベースからの回答を取り戻し、ボタンとテキストビューに表示するのに問題があります。単一値イベントのリスナーは、クラスが他のすべてのコマンドで完了し、私が持っているすべての質問のこのリスナーです。アンドロイドfirebaseは複数回データを取得しています
マイコード:
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);
}
あなたは私も質問と回答を節約するために静的変数を持つ外部クラスを使用している見ることができるようにし、それらを内部クラスから使います。
誰かが助けてくれることを願っています。
非同期プログラミングの素晴らしい世界へようこそ。すべてのfirebase関数は非同期であるため、プログラムの残りの部分が終了するのを待っているわけではありません。 [この回答]を見てください(http://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase-listener/33204705#33204705) –
問題は何ですか? –