java - 带有 SQLite 的多项选择测验应用程序(新活动中不显示分数)
问题描述
我是 android 新手,我只是通过观看带有 sqlite 集成系列(Youtube 播放列表)的多项选择测验应用程序来做一个 android 应用程序。现在我有一个问题。在教程中,他们有 2 个活动(主要活动和测验活动),并且来自 QuizActivity 的分数被发送回 MainActivity。但我有 3 个活动(主要活动、问题活动和结果活动)。我想将分数从 QuestionActivity 发送到 ResultActivity 并用 textView 显示。问题是分数总是显示为 0,但是当我调试时showResult()
,分数显示调试结果。你能检查我的编码并为我修复它。我真的是 android 新手,所以请帮助我。
这是调试结果。
主要活动
package com.enkoala.enkoala;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.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 android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.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 android.content.Intent;
import android.content.SharedPreferences;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.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();
}
}
解决方案
您是否正在尝试调试结果活动?乍一看,您的代码还可以。但我认为你的方法可能有问题onActivityResult()
,因为我知道这是一个异步任务。因此,您应该loadHighscore()
在onActivityResult()
收到您的score
价值后转入。认为它应该有所帮助。
推荐阅读
- java - Spring3应用tomcat7到Tomcat8升级报错-context.ContextLoader-Context初始化失败
- r - ggplot stat_summary 的平均值与计算的平均值不同
- react-native - 对 onPress 和 PressOff 反应原生 Touchable-something
- group-by - 如何按边属性分组并在结果中获取顶点+边属性?
- react-router - 在 React Router 中添加路由
- javascript - 这种动态合并两个对象的解决方案可以更简单吗?
- r - 如何在不增加旋转 (90°) 列名的表的列宽的情况下冻结 DT 中的第一列?
- element - Element组件中的SELECT选择器级别太高
- sympy - 在 sympy 中,如何组成微分算子并调用乘积规则?
- node.js - 简化不同的查询响应