Как изменить вопросы в задании с множественным выбором и передать оценку следующему заданию - PullRequest
1 голос
/ 13 июня 2019

Я работаю над приложением викторины, используя Retrofit для анализа массива вопросов.Есть 10 вопросов, каждый вопрос имеет 4 варианта (переключатель), которые будут изменены, если нажата кнопка « next ».Пока кнопка нажата, она должна сохранить ответ пользователя и, если ответ правильный, оценка должна увеличиться на 10 баллов.Общий балл должен быть показан в следующем задании после того, как пользователь завершит отвечать на все вопросы.

Я уже искал ссылки, но все же я не понимаю, как установить измененный текст, когда "следующая кнопка"нажата и сохраняет ответ пользователя и одновременно подсчитывает счет в моем проекте.

Вот мой ответ JSON

{
    "error": false,
    "status": "success",
    "result": [
        {
            "id": 96,
            "description": "Meyakini dalam hati, mengucapkan dengan lisan, dan mengamalkan dalam kehidupan sehari-hari adalah arti dari . . . .",
            "A": "iman",
            "B": "islam",
            "C": "ihsan",
            "D": "takwa",
            "Answer": "iman",
            "discussion": "Iman kepada Allah Swt. adalah percaya dengan sepenuh hati bahwa Dia itu ada, diucapkan dengan lisan, dan diamalkan dalam perbuatan sehari-hari."
        },
        {
            "id": 97,
            "description": "Fatimah disuruh membeli minyak goreng di sebuah warung. Ketika menerima uang kembalian, ia tahu bahwa jumlahnya lebih dari seharusnya, lalu ia mengembalikannya. Ia sadar bahwa Allah Swt. selalu mengawasi perbuatannya, karena Allah Swt. bersifat . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "al-Basiir",
            "discussion": "Allah Maha Mengawasi yang berarti juga Allah Maha Melihat (al_Basiir)."
        },
        {
            "id": 98,
            "description": "Subhanallah, indahnya alam semesta dengan segala isinya. Semuanya tercipta dengan teratur dan seimbang. Fenomena alam tersebut merupakan bukti bahwa Allah Maha . . . .",
            "A": "mengetahui",
            "B": "teliti",
            "C": "mendengar",
            "D": "melihat",
            "Answer": "teliti",
            "discussion": "Semuanya tercipta dengan teratur dan seimbang yang berarti Allah Maha Teliti."
        },
        {
            "id": 99,
            "description": "Hasan selalu berhati-hati dalam setiap ucapan dan perbuatannya, karena ia yakin bahwa Allah Swt. senantiasa mendengarnya. Perbuatan tersebut merupakan pengamalan dari keyakinannya bahwa Allah Swt. bersifat . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "as-Samii'",
            "discussion": "Allah Swt. senantiasa mendengarnya yang berarti Allah Maha Mendengar (as-Samii')."
        },
        {
            "id": 100,
            "description": "Di antara bentuk pengamalan dari keyakinan terhadap al-'Aliim adalah . . . .",
            "A": "rajin dalam menimba ilmu",
            "B": "berusaha menghindari kemungkaran",
            "C": "bersikap dermawan kepada sesama",
            "D": "bersikap pemaaf kepada sesama",
            "Answer": "rajin dalam menimba ilmu",
            "discussion": "Allah Swt. sangat menyukai orang yang rajin mencari ilmu pengetahuan dan mengamalkannya"
        },
        {
            "id": 101,
            "description": "Allah Swt. sendirilah yang mengetahui kapan terjadinya hari kiamat, mengetahui apa yang terkandung di dalam rahim, mengetahui kapan akan turun hujan. Allah Swt. Maha Mengetahui merupakan makna dari . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "al-'Aliim",
            "discussion": "Dari kasus di atas berarti Allah Maha Mengetahui (al-'Aliim)."
        },
        {
            "id": 102,
            "description": "Di antara bentuk pengamalan dari keyakinan terhadap al-Khabiir adalah . . . .",
            "A": "suka berbagi pengalaman dan pengetahuan",
            "B": "senang menolong orang yang sedang susah",
            "C": "menjadi suri teladan bagi orang lain",
            "D": "bersemangat dan kreatif dalam segala hal",
            "Answer": "bersemangat dan kreatif dalam segala hal",
            "discussion": "Allah Swt. menciptakan milyaran makhluk dengan berbagai ragamnya. Semuanya diketahui oleh Allah dengan detail, penuh kecermatan dan kewaspadaan, baik secara lahir maupun batin."
        },
        {
            "id": 103,
            "description": "Allah Swt. Maha Mendengar suara apa pun yang ada di alam semesta ini. Pendengaran Allah tidak terbatas, tidak ada satu pun suara yang lepas dari pendengaran-Nya. Allah Swt. Maha Mendengar merupakan makna dari . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "as-Samii'",
            "discussion": "Allah Maha Mendengar atau disebut juga dengan as-Samii'."
        },
        {
            "id": 104,
            "description": "Allah Swt. Maha Melihat segala sesuatu walaupun lembut dan kecil. Allah Swt. pun melihat apa yang ada di bumi dan di langit. Allah Maha Melihat merupakan makna . . . .",
            "A": "al-'Aliim",
            "B": "al-Khabiir",
            "C": "as-Samii'",
            "D": "al-Basiir",
            "Answer": "al-Basiir",
            "discussion": "Allah Maha Melihat atau disebut juga dengan al-Basiir."
        },
        {
            "id": 105,
            "description": "Di antara bentuk pengamalan dari keyakinan terhadap al-Basiir adalah . . . .",
            "A": "introspeksi diri untuk kebaikan",
            "B": "introspeksi diri untuk kebaikan",
            "C": "amar ma’ruf nahi munkar",
            "D": "menjadi suri tauladan bagi orang lain",
            "Answer": "introspeksi diri untuk kebaikan",
            "discussion": "Kita diharuskan selalu introspeksi diri untuk melihat kelebihan dan kekurangan kita sendiri agar hidup menjadi lebih terarah, ini merupakan salah satu pengalaman dari al-Basiir"
        }
    ]
}

Мой соответствующий класс модели

public class Task {
    @SerializedName("id")
    @Expose
    private int id_soal;

    @SerializedName("description")
    @Expose
    private String soal;

    @SerializedName("A")
    @Expose
    private String option_A;

    @SerializedName("B")
    @Expose
    private String option_B;

    @SerializedName("C")
    @Expose
    private String option_C;

    @SerializedName("D")
    @Expose
    private String option_D;

    @SerializedName("Answer")
    @Expose
    private String jawaban;

    @SerializedName("discussion")
    @Expose
    private String pembahasan;

    public Task(int id_soal, String soal, String option_A, String option_B, String option_C, String option_D, String jawaban, String pembahasan) {
        this.id_soal = id_soal;
        this.soal = soal;
        this.option_A = option_A;
        this.option_B = option_B;
        this.option_C = option_C;
        this.option_D = option_D;
        this.jawaban = jawaban;
        this.pembahasan = pembahasan;
    }

И мой TaskActivity

public class TaskActivity extends AppCompatActivity {

    private ArrayList<Task> tasks;
    TextView task_question;
    RadioGroup choices_group;
    RadioButton choice_A, choice_B, choice_C, choice_D;
    Button next, previous;

    ProgressDialog loading;
    Token auth = PreferencesConfig.getInstance(this).getToken();
    String token = "Bearer " + auth.getToken();

    int score;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_banksoal_test);

        task_question = findViewById(R.id.pertanyaan);
        choices_group = findViewById(R.id.rg_question);
        choice_A = findViewById(R.id.option_A);
        choice_B = findViewById(R.id.option_B);
        choice_C = findViewById(R.id.option_C);
        choice_D = findViewById(R.id.option_D);
        next = findViewById(R.id.bNext);
        previous = findViewById(R.id.bPrevious);

        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //????????
            }
        });

    }

    @Override
    protected void onResume() {
        super.onResume();
        alert_start();
    }

    public void alert_start(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setMessage("Mulai?");
        alertDialog.setNegativeButton("Jangan dulu, saya belum siap!", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(TaskActivity.this, BanksoalShelvesActivity.class);
                startActivity(intent);
            }
        });
        alertDialog.setPositiveButton("Ayo, dimulai!", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                task();
                dialog.dismiss();
            }
        });
        AlertDialog alert = alertDialog.create();
        alert.show();
    }

    public void task(){

        loading = ProgressDialog.show(this, null, "Please wait...",true, false);

        Intent intent = getIntent();
        final int task_id = intent.getIntExtra("task_id", 0);
        int classes = intent.getIntExtra("task_class", 0);

        Call<ResponseTask> call = RetrofitClient
                .getInstance()
                .getApi()
                .taskmaster_task(token, task_id, classes);

        call.enqueue(new Callback<ResponseTask>() {
            @Override
            public void onResponse(Call<ResponseTask> call, Response<ResponseTask> response) {
                loading.dismiss();
                ResponseTask responseTask = response.body();
                Log.d("TAG", "Response " + response.body());
                if (response.isSuccessful()){
                    if (responseTask.getStatus().equals("success")){
                        Log.i("debug", "onResponse : SUCCESSFUL");
                        tasks = responseTask.getTasks();
                        showQuestion();
                    }else {
                        Log.i("debug", "onResponse : FAILED");
                    }
                }
            }

            @Override
            public void onFailure(Call<ResponseTask> call, Throwable t) {
                Log.e("debug", "onFailure: ERROR > " + t.getMessage());
                loading.dismiss();
                Toast.makeText(TaskActivity.this, "Kesalahan terjadi.", Toast.LENGTH_LONG).show();
            }
        });
    }

    public void showQuestion(){
        for (int i = 0; i < tasks.size(); i++){
            task_question.setText(tasks.get(i).getSoal());
            choice_A.setText(tasks.get(i).getOption_A());
            choice_B.setText(tasks.get(i).getOption_B());
            choice_C.setText(tasks.get(i).getOption_C());
            choice_D.setText(tasks.get(i).getOption_D());
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Прежде всего, вам нужно сохранить currentTaskId:

private int currentTaskId = 0;

Затем вы должны загрузить полученные задачи в вашу переменную:

tasks = responseTask.getTasks();
loadQuestion();

И где-то в TaskActivity вам нужно написать этометод, который показывает вопрос пользователю:

private void loadQuestion(){
   Task task = tasks.get(currentTaskId);
   task_question.setText(task.getSoal());
   choice_A.setText(task.getOption_A());
   choice_B.setText(task.getOption_B());
   choice_C.setText(task.getOption_C());
   choice_D.setText(task.getOption_D());
   next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //check task answer, if task was answered correct than score+=10
            if(currentTaskId<tasks.size()){
               currentTaskId++;
               loadQuestion();
            } else {
               //open new activity
            }
        }
    });
    previous.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(currentTaskId>0){
               currentTaskId--;
               loadQuestion();
            } else {
               //do nothing as we are already on the first question
            }
        }
    });
}
0 голосов
/ 13 июня 2019

Создайте строковую переменную task_answer и получите ответ от Task (в данном коде jawaban). Когда нажата кнопка «Далее», проверьте, является ли выбранный вариант правильным ответом, и увеличьте оценку. Когда на все вопросы будут даны ответы, передайте счет следующему занятию ResultActivity через Intent. Я включаю модифицированный TaskActivity код ниже:

    public class TaskActivity extends AppCompatActivity {

    private ArrayList<Task> tasks;
    TextView task_question;
    RadioGroup choices_group;
    RadioButton choice_A, choice_B, choice_C, choice_D;
    Button next, previous;

    ProgressDialog loading;
    Token auth = PreferencesConfig.getInstance(this).getToken();
    String token = "Bearer " + auth.getToken();

    int score;
    String task_answer;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_banksoal_test);

        task_question = findViewById(R.id.pertanyaan);
        choices_group = findViewById(R.id.rg_question);
        choice_A = findViewById(R.id.option_A);
        choice_B = findViewById(R.id.option_B);
        choice_C = findViewById(R.id.option_C);
        choice_D = findViewById(R.id.option_D);
        next = findViewById(R.id.bNext);
        previous = findViewById(R.id.bPrevious);

        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //check if the provided option matches with the answer received from the API & store the value
                if (task_answer.equals(selectedChoiceText))
                    score += 10
            }
        });

    }

    @Override
    protected void onResume() {
        super.onResume();
        alert_start();
    }

    public void alert_start(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setMessage("Mulai?");
        alertDialog.setNegativeButton("Jangan dulu, saya belum siap!", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(TaskActivity.this, BanksoalShelvesActivity.class);
                startActivity(intent);
            }
        });
        alertDialog.setPositiveButton("Ayo, dimulai!", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                task();
                dialog.dismiss();
            }
        });
        AlertDialog alert = alertDialog.create();
        alert.show();
    }

    public void task(){

        loading = ProgressDialog.show(this, null, "Please wait...",true, false);

        Intent intent = getIntent();
        final int task_id = intent.getIntExtra("task_id", 0);
        int classes = intent.getIntExtra("task_class", 0);

        Call<ResponseTask> call = RetrofitClient
                .getInstance()
                .getApi()
                .taskmaster_task(token, task_id, classes);

        call.enqueue(new Callback<ResponseTask>() {
            @Override
            public void onResponse(Call<ResponseTask> call, Response<ResponseTask> response) {
                loading.dismiss();
                ResponseTask responseTask = response.body();
                Log.d("TAG", "Response " + response.body());
                if (response.isSuccessful()){
                    if (responseTask.getStatus().equals("success")){
                        Log.i("debug", "onResponse : SUCCESSFUL");
                        tasks = responseTask.getTasks();
                        showQuestion()
                    }else {
                        Log.i("debug", "onResponse : FAILED");
                    }
                }
            }

            @Override
            public void onFailure(Call<ResponseTask> call, Throwable t) {
                Log.e("debug", "onFailure: ERROR > " + t.getMessage());
                loading.dismiss();
                Toast.makeText(TaskActivity.this, "Kesalahan terjadi.", Toast.LENGTH_LONG).show();
            }
        });
    }

    public void showQuestion(){
        for (int i = 0; i < tasks.size(); i++){
            task_question.setText(tasks.get(i).getSoal());
            choice_A.setText(tasks.get(i).getOption_A());
            choice_B.setText(tasks.get(i).getOption_B());
            choice_C.setText(tasks.get(i).getOption_C());
            choice_D.setText(tasks.get(i).getOption_D());
            //get answer from task
            task_answer = tasks.get(i).getAnswer()
        }
    }
}
...