Modifying the scoring of a quiz app (android studio)

Tags: , ,



Context about the app:

This is a sample 5 question test app that I made while I also learned firebase database just yesterday. The app is working perfectly and it does it needs to do, BUT what I wanna do next is that there are no right answers and each button corresponds to a score

ex: Question: What are you feeling out of 1-5

A.)1 – I am feeling bad B.)2 – I am feeling sad C.)3 – neutral D.)4 – I am feeling happy E.)5 – I am feeling good

As you can see here if the user answers E for example then he gets 5 pts (the points is not shown) and the user will get 1 point if he answers A and so on…

code:

{
    private TextView mScoreView;
    private int questionNumber = 0;
    private TextView mQuestion, result;
    private Button choice1,choice2,choice3,choice4,quit;
    private int nScore = 0;
    private String ans;
    private Firebase question,c1,c2,c3,c4,answer;


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

        result = (TextView) findViewById(R.id.result);
        mScoreView = (TextView) findViewById(R.id.score);
        mQuestion = (TextView) findViewById(R.id.question);
        choice1 = (Button) findViewById(R.id.c1);
        choice2 = (Button) findViewById(R.id.c2);
        choice3 = (Button) findViewById(R.id.c3);
        choice4 = (Button) findViewById(R.id.c4);
        quit = (Button) findViewById(R.id.quit);


        updateQuestion();



        quit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Maths2.this,MainActivity.class);

                startActivity(intent);
                finish();

            }
        });






//CHOICE 1//////////////////////////////////////////////////////////////
        choice1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (choice1.getText().equals(ans)) {
                    nScore = nScore + 1;
                    updateScore(nScore);
                    updateQuestion();
                }else
                    {
                        updateQuestion();

                }

            }
        });
        //CHOICE 1 //////////////////////////////////////////////////////////

        //CHOICE 2//////////////////////////////////////////////////////////////
        choice2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (choice2.getText().equals(ans)) {
                    nScore = nScore + 2;
                    updateScore(nScore);
                    updateQuestion();
                }else
                {
                    updateQuestion();

                }

            }
        });
        //CHOICE 2 //////////////////////////////////////////////////////////

        //CHOICE 3//////////////////////////////////////////////////////////////
        choice3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (choice3.getText().equals(ans)) {
                    nScore = nScore + 3;
                    updateScore(nScore);
                    updateQuestion();
                }else
                {
                    updateQuestion();

                }

            }
        });
        //CHOICE 3 //////////////////////////////////////////////////////////

        //CHOICE 4//////////////////////////////////////////////////////////////
        choice4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (choice4.getText().equals(ans)) {
                    nScore = nScore + 4;
                    updateScore(nScore);
                    updateQuestion();
                }else
                {
                    updateQuestion();

                }

            }
        });
        //CHOICE 4 //////////////////////////////////////////////////////////



    }
    private void updateScore (int score){
       mScoreView.setText("" + nScore);
    }





    private void updateQuestion() {

        question = new Firebase("https://thesis-e4f56-default-rtdb.firebaseio.com/"+ questionNumber + "/question");
        question.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String question = dataSnapshot.getValue(String.class);
                mQuestion.setText(question);
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }





        });
        c1= new Firebase("https://thesis-e4f56-default-rtdb.firebaseio.com/"+ questionNumber + "/choice1");
        c1.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String choice = dataSnapshot.getValue(String.class);
        choice1.setText(choice);
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});
        c2= new Firebase("https://thesis-e4f56-default-rtdb.firebaseio.com/"+ questionNumber +"/choice2");
        c2.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String choice = dataSnapshot.getValue(String.class);
                choice2.setText(choice);
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });


        c3= new Firebase("https://thesis-e4f56-default-rtdb.firebaseio.com/"+ questionNumber +"/choice3");
        c3.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String choice = dataSnapshot.getValue(String.class);
                choice3.setText(choice);
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });

        c4= new Firebase("https://thesis-e4f56-default-rtdb.firebaseio.com/"+ questionNumber +"/choice4");
        c4.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String choice = dataSnapshot.getValue(String.class);
                choice4.setText(choice);
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });

        answer = new Firebase( "https://thesis-e4f56-default-rtdb.firebaseio.com/"+questionNumber+"/answer");
        answer.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ans = dataSnapshot.getValue(String.class);
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });

        if (nScore == 10) {

            result.setText("good job");

        }
        questionNumber ++;


    }
}

I am doing this since yesterday and I also just learned doing firebase yesterday. I just got stumped for the past hour on what the logic is.

Answer

You need to remove the condition choice4.getText().equals(ans) inside all the choice click listeners. You should also put the code in a common method.

public void handleChoiceClicked(){
 nScore = nScore + 2;
 updateScore(nScore);
 updateQuestion();
}

call it from the click listeners rather than duplicating them.

           choice1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    handleChoiceClicked();
                }
            });
            //CHOICE 1 //////////////////////////////////////////////////////////

            //CHOICE 2//////////////////////////////////////////////////////////////
            choice2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    handleChoiceClicked();
                }
            });
            //CHOICE 2 //////////////////////////////////////////////////////////

            //CHOICE 3//////////////////////////////////////////////////////////////
            choice3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    handleChoiceClicked();
                }
            });
            //CHOICE 3 //////////////////////////////////////////////////////////

            //CHOICE 4//////////////////////////////////////////////////////////////
            choice4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    handleChoiceClicked();
                }
            });


Source: stackoverflow