有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有SQLite的java多项选择题测验应用程序(新活动中不显示分数)

我是安卓新手,我只是通过观看带有sqlite集成系列(Youtube播放列表)的多项选择题测验应用程序来做一个安卓应用程序。现在我有个问题。在本教程中,他们有两个活动(Main activityquick activity),QuizActivity的分数将发送回Main activity。但是我有三个活动(主要活动问题活动结果活动)。我想把成绩从QuestionActivity发送到ResultActivity,并用textView显示出来。问题是分数总是显示为0,但当我调试showResult()时,分数显示的是调试结果。你能检查一下我的代码并帮我修好吗。我对安卓系统很陌生,所以请帮帮我

This is the debug result.

Debug result

main活动

package com.enkoala.enkoala;

import 安卓.content.Intent;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.Button;

public class MainActivity extends AppCompatActivity {

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

    Button buttonGeneral= findViewById(R.id.button_general_english);
    buttonGeneral.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            GeneralEnglish();
        }
    });
}
private void GeneralEnglish(){
    Intent intent=new Intent(MainActivity.this,QuestionActivity.class);
    startActivity(intent);
}
}

问题活动

package com.enkoala.enkoala;

import 安卓.content.Intent;
import 安卓.content.SharedPreferences;
import 安卓.content.res.ColorStateList;
import 安卓.support.annotation.Nullable;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.RadioButton;
import 安卓.widget.RadioGroup;
import 安卓.widget.TextView;
import 安卓.widget.Toast;

import java.util.Collections;
import java.util.List;


public class QuestionActivity extends AppCompatActivity {
public   static final int REQUEST_CODE_QUIZ = 1;

public static final String EXTRA_SCORE="extra_score";


private TextView textViewQuestion;
private TextView textViewQuestionCount;
private RadioGroup radioGroup;
private RadioButton radioButton1;
private RadioButton radioButton2;
private RadioButton radioButton3;
private Button buttonNext;

private ColorStateList textColorDefaultRb;

private List<Question> questionList;

private int questionCounter;
private int questionCountTotal;
private Question currentQuestion;

private int score;
private boolean answered;

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

    textViewQuestion= findViewById(R.id.text_view_question);
    textViewQuestionCount= findViewById(R.id.text_view_question_count);
    radioGroup= findViewById(R.id.radio_group);
    radioButton1= findViewById(R.id.radio_button1);
    radioButton2= findViewById(R.id.radio_button2);
    radioButton3= findViewById(R.id.radio_button3);
    buttonNext= findViewById(R.id.button_next);

    QuizDatabseHelper databseHelper=new QuizDatabseHelper(this);
    questionList=databseHelper.getAllQuestions();
    questionCountTotal=questionList.size();
    Collections.shuffle(questionList);

    showNextQuestion();

    buttonNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!answered){
                if (radioButton1.isChecked() || radioButton2.isChecked() || radioButton3.isChecked()){
                    checkAnswer();
                }else {
                    Toast.makeText(QuestionActivity.this, "Please select an answer",                                                     Toast.LENGTH_SHORT).show();
                }
            }else {
                showNextQuestion();
            }
        }
    });
    }
    private void showNextQuestion(){
    radioGroup.clearCheck();

    if (questionCounter<questionCountTotal){
        currentQuestion=questionList.get(questionCounter);
        textViewQuestion.setText(currentQuestion.getQuestion());
        radioButton1.setText(currentQuestion.getOption1());
        radioButton2.setText(currentQuestion.getOption2());
        radioButton3.setText(currentQuestion.getOption3());

        questionCounter++;
        textViewQuestionCount.setText("Question: "+ questionCounter + "/" + questionCountTotal);
        answered=false;
        buttonNext.setText("Next");
    }else {
        buttonNext.setText("Get Result");
        showResult();
    }
    }
    public void showResult(){
        Intent resultIntent = new Intent(QuestionActivity.this,ResultActivity.class);
        resultIntent.putExtra(EXTRA_SCORE,score);
        setResult(RESULT_OK,resultIntent);
        startActivityForResult(resultIntent,REQUEST_CODE_QUIZ);
    }


    private void checkAnswer(){
    answered=true;

    RadioButton radioButtonselected=findViewById(radioGroup.getCheckedRadioButtonId());
    int answernumber = radioGroup.indexOfChild(radioButtonselected) + 1;
    if (answernumber == currentQuestion.getAnswernumber()){
        score++;
    }
    showNextQuestion();
    }
}

结果性

package com.enkoala.enkoala;

import 安卓.content.Intent;
import 安卓.content.SharedPreferences;
import 安卓.support.annotation.Nullable;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.TextView;

import static com.enkoala.enkoala.QuestionActivity.REQUEST_CODE_QUIZ;

public class ResultActivity extends AppCompatActivity {

public static final String SHARED_PREFS = "sharedPrefs";
public static final String KEY_HIGHSCORE = "keyhighscore";
private TextView textViewHighscore;
private int highscore;


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

    textViewHighscore = findViewById(R.id.text_view_score);
    loadHighscore();

    final Button buttonback = findViewById(R.id.button_back);
    buttonback.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            buttonBack();
        }
    });

}

private void buttonBack() {
    Intent intent = new Intent(ResultActivity.this, MainActivity.class);
    startActivity(intent);
}

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CODE_QUIZ) {
        if (resultCode == RESULT_OK) {
            int score = data.getIntExtra(QuestionActivity.EXTRA_SCORE, 0);
            if (score > highscore) {
                updateHighscore(score);
            }
        }
    }
}

private void loadHighscore() {
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    highscore = sharedPreferences.getInt(KEY_HIGHSCORE, 0);
    textViewHighscore.setText("Your score is " + highscore + " out of 25. ");
}

private void updateHighscore(int highscoreNew) {
    highscore = highscoreNew;
    textViewHighscore.setText("Your score is " + highscore + " out of 25. ");
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt(KEY_HIGHSCORE, highscore);
    editor.apply();
}

}


共 (1) 个答案

  1. # 1 楼答案

    您正在尝试调试结果活动吗?乍一看,你的代码还可以。但是我认为你的onActivityResult()方法可能有问题,因为我知道这是一个异步任务。因此,在收到score值后,应该将loadHighscore()转移到onActivityResult()。我觉得应该有帮助