bugfix> java > 投稿

コード:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.taking_quiz);
    que = (TextView) findViewById(R.id.txtQuestion);
    opt1 = (Button) findViewById(R.id.button1);
    opt2 = (Button) findViewById(R.id.button2);
    opt3 = (Button) findViewById(R.id.button3);
    opt4 = (Button) findViewById(R.id.button4);
    qn = (TextView) findViewById(R.id.number);
    sco = (TextView) findViewById(R.id.score);
    qn.setText("1");
    sco.setText("Score : 0");
    qn.setText("Question : 1");
    RecieversId = getIntent().getStringExtra("Recievers_Id");
    mAuth = FirebaseAuth.getInstance();
    currentUser = mAuth.getCurrentUser();
    mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(RecieversId).child("Quiz").child("Question" + mQuestionNumber);
    updateQuestion();
}
private void updateQuestion() {
    if (mDatabaseReference != null) {
        mDatabaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String question = dataSnapshot.child("Question").getValue().toString();
                answer = dataSnapshot.child("Answer").getValue().toString();
                option1 = dataSnapshot.child("Option1").getValue().toString();
                option2 = dataSnapshot.child("Option2").getValue().toString();
                option3 = dataSnapshot.child("Option3").getValue().toString();
                option4 = dataSnapshot.child("Option4").getValue().toString();
                que.setText(question);
                opt1.setText(option1);
                opt2.setText(option2);
                opt3.setText(option3);
                opt4.setText(option4);
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
        opt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (option1.equals(answer)) {
                    opt1.setBackgroundColor(Color.GREEN);
                    mScore++;
                    sco.setText("Score : " + mScore);
                } else
                    opt1.setBackgroundColor(Color.RED);
                sco.setText("Score : " + mScore);
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mQuestionNumber++;
                        qn.setText("Question : " + mQuestionNumber);
                        updateQuestion();
                        opt1.setBackgroundColor(Color.CYAN);
                    }
                }, 1500);
            }
        });
        opt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (option2.equals(answer)) {
                    opt2.setBackgroundColor(Color.GREEN);
                    mScore++;
                    sco.setText("Score : " + mScore);
                } else
                    opt2.setBackgroundColor(Color.RED);
                sco.setText("Score : " + mScore);
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mQuestionNumber++;
                        qn.setText("Question : " + mQuestionNumber);
                        updateQuestion();
                        opt2.setBackgroundColor(Color.CYAN);
                    }
                }, 1500);
            }
        });
        opt3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (option3.equals(answer)) {
                    opt3.setBackgroundColor(Color.GREEN);
                    mScore++;
                } else
                    opt3.setBackgroundColor(Color.RED);
                sco.setText("Score : " + mScore);
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mQuestionNumber++;
                        qn.setText("Question : " + mQuestionNumber);
                        updateQuestion();
                        opt3.setBackgroundColor(Color.CYAN);
                    }
                }, 1500);
            }
        });
        opt4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (option4.equals(answer)) {
                    opt4.setBackgroundColor(Color.GREEN);
                    mScore++;
                    sco.setText("Score : " + mScore);
                } else
                    opt4.setBackgroundColor(Color.RED);
                sco.setText("Score : " + mScore);
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mQuestionNumber++;
                        qn.setText("Question : " + mQuestionNumber);
                        updateQuestion();
                        opt4.setBackgroundColor(Color.CYAN);
                    }
                }, 1500);
            }
        });
    } else {
        Intent intent = new Intent(TakingQuiz.this, TakingQuizDone.class);
        intent.putExtra("Score", mScore);
        startActivity(intent);
    }
}

firebaseデータベースを使用して、Androidでクイズアプリを作成しようとしています。
ボタンの1つをクリックすると(質問に答える)、質問数が増加し、その質問に応じて増加します。 しかし、++は機能していて、 TextView 質問番号は、質問番号が増加していることを示していますが、質問は更新されていません。
データベースのように、私は最初の質問自体と同じオプションを取得しています。
ここで updateQuestion() を推測するbuttonclick後にメソッドが呼び出されていません。助けてください

データベース-https://ibb.co/emVEVo

回答 3 件
  • あなたの firebase database reference (mDatabaseReference) のようです  nullなので、まずこれをチェックします。 not null の場合  次に、デバッグログを使用して code is not working のどの行を確認します 。

  • OKみんな私は何が間違っていたのか理解しました...メソッド内ではなくonCreate内でデータベース参照を初期化しました...

  • きみのFirebaseデータベースリファレンス 間違ったツリーを取得しています。
    あなたの画像にはもっとあります先祖 前 "クイズ」がありますVwtdCRK ... 前と他の...
    FirebaseDatabase.getInstance().getReference() を使用する場合  かかりますルート データベースの。次のようになります。

    FirebaseDatabase.getInstance().getReference().child("rootNotShowingInimage")
        .child("VwtdCRK0AXQ2bnKe01fy8mYUPqs2").child("Quiz").child("Question"...
    
    

あなたの答え