java - 显示下一个数据库条目

标签 java android sqlite

我正在编写我的第一个 Android 应用程序。

我正在尝试创建一个测验应用程序。我有一些问题存储在 SQLite 数据库中,这些问题一个接一个地显示。
用户选择一个答案(单选按钮),然后单击“下一步按钮”,然后显示下一个问题,依此类推。

以下代码显示我的 Activity 文件一个接一个地显示每个问题,该文件完美运行

<小时/> ACEActivity(旧版,工作版本)

public class ACEActivity extends Activity {
List<Question> quesList;
int score = 0;
int qid = 0;
Question currentQ;
TextView txtQuestion;
RadioButton rda, rdb, rdc, rdd;
Button butNext;

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

    DatabaseHelper db = new DatabaseHelper(this);

    quesList = db.getAllACEQuestions();
    currentQ = quesList.get(qid);
    txtQuestion = (TextView)findViewById(R.id.textView);
    rda = (RadioButton)findViewById(R.id.radio0);
    rdb = (RadioButton)findViewById(R.id.radio1);
    rdc = (RadioButton)findViewById(R.id.radio2);
    rdd = (RadioButton)findViewById(R.id.radio3);
    butNext = (Button)findViewById(R.id.nextButton);
    setQuestionView();

    butNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RadioGroup grp = (RadioGroup)findViewById(R.id.radioGroup);
            RadioButton answer = (RadioButton)findViewById(grp.getCheckedRadioButtonId());
            Log.d("yourans", currentQ.getANSWER() + " " + answer.getText());
            // If the correct answer was clicked display the next question
            if(currentQ.getANSWER().equals(answer.getText())) {
                currentQ = quesList.get(qid);
                setQuestionView();
            }
        }
    });
}

// Load the next question
private void setQuestionView() {
    txtQuestion.setText(currentQ.getQUESTION());
    rda.setText(currentQ.getOPTA());
    rdb.setText(currentQ.getOPTB());
    rdc.setText(currentQ.getOPTC());
    rdd.setText(currentQ.getOPTD());
    qid++;
    }
}

<小时/> 在此 Activity 的新版本中,我加载另一个 Activity ,以便在单击正确或错误答案时向用户提供即时反馈。

显示反馈 Activity 后,我想返回此 Activity 并显示下一个问题。

我尝试通过将问题 ID 从反馈 Activity (ACECorrectActivity) 传递到此 Activity (ACEActivity) 来实现此目的,但没有成功。


<小时/> 我如何尝试解决这个问题:

ACEActivity(新版本,仅针对第一个问题)

public class ACEActivity extends Activity {
List<Question> quesList;
int score = 0;
int qid = 0;
Question currentQ;
TextView txtQuestion;
RadioButton rda, rdb, rdc, rdd;
Button checkBtn;

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

    // THIS PART IS NEW ================================
    // Get the intent
    Intent intent = getIntent();
    // Get the question id (if there are any extras)
    Bundle extras = intent.getExtras();
    if (extras != null) {
        int qid = extras.getInt("nextQuestionID");
    } else {
        int qid = 0;
    }
    // ==================================================

    DatabaseHelper db = new DatabaseHelper(this);

    quesList = db.getAllACEQuestions();
    currentQ = quesList.get(qid);
    txtQuestion = (TextView)findViewById(R.id.textView);
    rda = (RadioButton)findViewById(R.id.radio0);
    rdb = (RadioButton)findViewById(R.id.radio1);
    rdc = (RadioButton)findViewById(R.id.radio2);
    rdd = (RadioButton)findViewById(R.id.radio3);
    checkBtn = (Button) findViewById(R.id.checkButton);

    setQuestionView(qid);

    checkBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RadioGroup grp = (RadioGroup) findViewById(R.id.radioGroup);
            RadioButton answer = (RadioButton) findViewById(grp.getCheckedRadioButtonId());
            Log.d("yourans", currentQ.getANSWER() + " " + answer.getText());
            // THIS PART IS NEW AND WORKING FINE ================================
            // If the correct answer was clicked
            if (currentQ.getANSWER().equals(answer.getText())) {
                Intent intent = new Intent(ACEActivity.this, CorrectACEActivity.class);
                startActivity(intent);
            // If the wrong answer was clicked
            } else {
                Intent intent = new Intent(ACEActivity.this, FalseACEActivity.class);
                startActivity(intent);
            }
        }
    });
}

private void setQuestionView() {
    txtQuestion.setText(currentQ.getQUESTION());
    rda.setText(currentQ.getOPTA());
    rdb.setText(currentQ.getOPTB());
    rdc.setText(currentQ.getOPTC());
    rdd.setText(currentQ.getOPTD());
    qid++;
    }
}

ACECorrectActivity(选择正确答案并在 ACEActivity 中单击下一步按钮时加载反馈 Activity )

public class CorrectACEActivity extends Activity {
List<Question> quesList;
int score = 0;
int qid = 0;
Question currentQ;
TextView txtQuestion;
RadioButton rda, rdb, rdc, rdd;
Button nextBtn;

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

    DatabaseHelper db = new DatabaseHelper(this);

    quesList = db.getAllACEQuestions();
    currentQ = quesList.get(qid);
    txtQuestion = (TextView) findViewById(R.id.textView);
    rda = (RadioButton) findViewById(R.id.radio0);
    rdb = (RadioButton) findViewById(R.id.radio1);
    rdc = (RadioButton) findViewById(R.id.radio2);
    rdd = (RadioButton) findViewById(R.id.radio3);
    nextBtn = (Button) findViewById(R.id.nextButton);

    // Set colors according to correct answer
    rda.setBackgroundColor(Color.RED);
    rdb.setBackgroundColor(Color.RED);
    rdc.setBackgroundColor(Color.RED);
    rdd.setBackgroundColor(Color.RED);

    if(currentQ.getANSWER().equals(currentQ.getOPTA())) {
        rda.setBackgroundColor(Color.GREEN);
    } else if(currentQ.getANSWER().equals(currentQ.getOPTB())) {
        rdb.setBackgroundColor(Color.GREEN);
    } else if(currentQ.getANSWER().equals(currentQ.getOPTC())) {
        rdc.setBackgroundColor(Color.GREEN);
    } else if(currentQ.getANSWER().equals(currentQ.getOPTD())) {
        rdd.setBackgroundColor(Color.GREEN);
    }

    setQuestionView();

    // WHEN NEXT BUTTON IS CLICKED RETURN TO ACEActivity AND LOAD NEXT QUESTION
    nextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(CorrectACEActivity.this, ACEActivity.class);
            intent.putExtra("nextQuestionID", currentQ + 1);
            startActivity(intent);
        }
    });
}

private void setQuestionView() {
    txtQuestion.setText(currentQ.getQUESTION());
    rda.setText(currentQ.getOPTA());
    rdb.setText(currentQ.getOPTB());
    rdc.setText(currentQ.getOPTC());
    rdd.setText(currentQ.getOPTD());
    qid++;
    }
}



第一个问题完美。然而,当我回答第一个问题后返回 ACEActivity 时,我又遇到了第一个问题。


正如您所看到的,我对此非常陌生,并且非常乐意提供任何帮助!谢谢!!

最佳答案

 intent.putExtra("nextQuestionID", currentQ + 1);

你在 CorrectACEActivity 中设置了额外的错误,不应该是这样吗?

 intent.putExtra("nextQuestionID", qid+ 1);

关于java - 显示下一个数据库条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40132501/

相关文章:

java - 在 Hibernate 中删除日期集合

java - 如何为特定的 O/S 平台指定 Eclipse .classpath 条目?

java - 如何从逗号分隔的数据库中获取数据?

安卓应用内结算 : Refunded in-app purchases not cancelled

android - grails C2DM - Android

sql - Rails find_by_sql 依赖于数据库类型

java - 使用 CreateProcess 从 Win32 C++ 应用程序启动 Java 应用程序时出错

java - 使用 EJB 3.0 删除数据库行

android - Android 是否支持 JDBC

python - Sqlite/SQLAlchemy : how to enforce Foreign Keys?