0

この方法は正しいですか?

public List<Question> getQuestionSet(int i){
        List<Question> questionSet = new ArrayList<Question>();
       Cursor c = db.rawQuery("SELECT * FROM quiztable ORDER BY RANDOM() LIMIT X" + i, null);
        while (c.moveToNext()){
            Question q = new Question();
            q.setQuestion(c.getString(1));
            q.setAnswer(c.getString(2));
            q.setOption1(c.getString(3));
            q.setOption2(c.getString(4));
            questionSet.add(q);
        }
        return questionSet;

はいの場合、データベースから各質問をランダムな順序で個別に表示する方法を作成するにはどうすればよいですか..申し訳ありません。どうすればいいのかわからない...

編集:上記のコードをあなたのコードに変更してみました。さて、別の質問です。これは、MainActivity ファイルにあるコードです。

public class Second extends Activity {

TextView questionTextView;
DBAdapter db = new DBAdapter(this);
Cursor mCursor;



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

    TextView questionTextView = (TextView) findViewById(R.id.question);
    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
    RadioButton rb0 = (RadioButton) findViewById(R.id.radio0);
    RadioButton rb1 = (RadioButton) findViewById(R.id.radio1);
    RadioButton rb2 = (RadioButton) findViewById(R.id.radio2);

    db.open();
    db.getQuestionSet(1);
    String question = mCursor.getString(mCursor.getColumnIndex(DBAdapter.KEY_QUESTIONS));
    String answer = mCursor.getString(mCursor.getColumnIndex(DBAdapter.KEY_ANSWERS));
    String opt1 = mCursor.getString(mCursor.getColumnIndex(DBAdapter.KEY_CHOICE1));
    String opt2 = mCursor.getString(mCursor.getColumnIndex(DBAdapter.KEY_CHOICE2));
    questionTextView.setText(question);
    rb0.setText(answer);
    rb1.setText(opt1);
    rb2.setText(opt2);

}

}

実行しようとするとエラーが発生します。私は自分のコードが間違っていることを知っています。しかし、それを修正する方法がわかりません。より具体的には、私がやろうとしていることは、アプリのクイズを作成することです. データベースを作成することができました。アプリケーションから質問と回答を挿入/更新/削除できました。しかし、データベースに保存されている質問を表示できないため、質問に答えて採点することができました。助けてくれてありがとう。初心者です。Eclipse を 1 か月間勉強していますが、簡単なクイズ アプリを作成することさえできません。:(

ありがとうございました。Logcat に表示されるエラーは次のとおりです。

 09-03 15:29:49.516: D/AndroidRuntime(4091): Shutting down VM
 09-03 15:29:49.516: W/dalvikvm(4091): threadid=1: thread exiting with uncaught exception (group=0x40015560)
 09-03 15:29:49.527: E/AndroidRuntime(4091): FATAL EXCEPTION: main
 09-03 15:29:49.527: E/AndroidRuntime(4091): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dtan.quiz/com.dtan.quiz.Second}: java.lang.NullPointerException
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.os.Handler.dispatchMessage(Handler.java:99)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.os.Looper.loop(Looper.java:123)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.app.ActivityThread.main(ActivityThread.java:3683)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at java.lang.reflect.Method.invokeNative(Native Method)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at   java.lang.reflect.Method.invoke(Method.java:507)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at dalvik.system.NativeStart.main(Native Method)
 09-03 15:29:49.527: E/AndroidRuntime(4091): Caused by: java.lang.NullPointerException
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at com.dtan.quiz.Second.onCreate(Second.java:30)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
 09-03 15:29:49.527: E/AndroidRuntime(4091):    ... 11 more
4

1 に答える 1

1
public List<Question> getQuestionSet(int i) {
    List<Question> questionSet = new ArrayList<Question>();
    final Cursor c = db.rawQuery("SELECT * FROM quiztable ORDER BY RANDOM() LIMIT " + i, null);
    if (c != null) {
        try {
            while (c.moveToNext()) {
                Question q = new Question();
                q.setQuestion(c.getString(1));
                q.setAnswer(c.getString(2));
                q.setOption1(c.getString(3));
                q.setOption2(c.getString(4));
                questionSet.add(q);
            }
        } finally {
            c.close();
        }
    }
    return questionSet;
}

編集:

を初期化していませんCursorListただし、メソッドから戻るので役に立たないのでgetQuestionSet()、代わりに使用してください。

List<Question> questions = db.getQuestionSet(1);
if (questions != null && !questions.isEmpty()) {
   Question question = questions.get(0);
   now use:
   question.getQuestion();
   question.getAnswer();
   question.getOption1();
   question.getOption2();
}
于 2012-09-03T07:01:53.820 に答える