【问题标题】:Android How to get random sqlite data?Android 如何获取随机的 sqlite 数据?
【发布时间】:2013-04-19 01:05:08
【问题描述】:

这是我的 DateBaseHelper 公共游标 getQuestionsFromQuizID(int quizID){

             Integer quiz = Integer.valueOf(quizID);

             return myDataBase.rawQuery("select * from Questions where quizID ="+quiz.toString(), null );

     }

     public Cursor getAnswersFromQuestionID(int questionID, int quizID){

             Integer question = Integer.valueOf(questionID);
             Integer quiz = Integer.valueOf(quizID);

             return myDataBase.rawQuery("select * from Answers where questionID = "+question.toString()+" and quizID = "+quiz.toString(), null );
     }

    public Boolean isAnswerCorrect(int answerID) {

            Integer answer = Integer.valueOf(answerID);
            int correctBit;

            Cursor cursor = myDataBase.rawQuery("select * from Answers where _id ="
                            + answer.toString(), null);

            cursor.moveToFirst();
            correctBit = cursor.getInt(3);

            if (correctBit == 1) {
                    return true;
            } else {
                    return false;
            }

    }

    public int getQuestionCountByQuizID(int quizID){

            Integer quiz = Integer.valueOf(quizID);

            Cursor cursor = myDataBase.rawQuery("select * from Questions where quizID ="+quiz.toString(), null);

            cursor.moveToFirst();

            return cursor.getCount();

    }

...我有测验活动的方法

私人无效getNextQuestion(){ 字符串问题;

            // set question count text at the top of screen using string
            // concatenation
            Integer currentCount = new Integer(curQuestion + 1);
            ((TextView) findViewById(R.id.questioncount)).setText("Question "
                            + currentCount.toString() + " of "
                            + totalQuestionCount.toString());

            // get quizID based on which button was pressed on PickQuizActivity
            int quizID = getIntent().getExtras().getInt("quizID");

            // use returned cursor to get question as string
            Cursor questionCursor = myDbHelper.getQuestionsFromQuizID(quizID);

            questionCursor.moveToPosition(curQuestion);

            // getString(3): gets the zero-indexed column 2 from current row cursor
            // is on
            question = questionCursor.getString(2);

            // update UI to show question pulled from database
            ((TextView) findViewById(R.id.question)).setText(question);

            Cursor answerCursor = myDbHelper.getAnswersFromQuestionID(
                            curQuestion + 1, quizID);

            // set each answer text, there will always be 4 answers
            // also collect questionID for isCorrect check when onClick is called
            answerCursor.moveToFirst();
            ((TextView) findViewById(R.id.answer1)).setText(answerCursor
                            .getString(4));
            answerID1 = answerCursor.getInt(0);

            answerCursor.moveToNext();
            ((TextView) findViewById(R.id.answer2)).setText(answerCursor
                            .getString(4));
            answerID2 = answerCursor.getInt(0);

            answerCursor.moveToNext();
            ((TextView) findViewById(R.id.answer3)).setText(answerCursor
                            .getString(4));
            answerID3 = answerCursor.getInt(0);

            answerCursor.moveToNext();
            ((TextView) findViewById(R.id.answer4)).setText(answerCursor
                            .getString(4));
            answerID4 = answerCursor.getInt(0);

            // increment question counter, will be used to retrieve next question
            curQuestion++;

            // set flag for last question reached
            if (questionCursor.isLast()) {
                    lastQuestionReached = true;
            }
    }

所以...当我不显示随机问题时,我编辑 sql,只需添加 SORT BY RANDOM() LIMIT 10 我的问题和答案混淆了......

任何人都可以知道如何在不重复的情况下获得随机问题的解决方案吗? 以及如何避免问题和答案的混合数据?

【问题讨论】:

    标签: java android sqlite


    【解决方案1】:

    您可以在 sqlite 数据中添加一个额外的列,如果不使用则为 0,如果使用则为 1。我会标记该问题已与 1 一起使用。您可以查询数据库以仅返回该字段为 0 的问题。如果没有可用的问题为 0(它们都已被使用),只需重置所有值该列为 0,所有问题都同样可用。

    如果您有多个会话,并且希望确保随着时间的推移,所有问题都得到解决,这将有所帮助。

    我假设您将答案存储在与您的问题相同的行中。

    我会首先进行查询以获取 1 个未使用的问题/答案对。然后,当然,将其标记为已使用。我会用它作为“问题”。然后我会再查询 3 或 4 个问题/答案对,不用担心它们是否被使用。选择那些错误的答案,然后将它们与选择题的正确答案随机混合。

    【讨论】:

    • 感谢您的回答。你能告诉我如何解决问题和答案中混合数据的问题吗?
    • 以上已编辑答案。请随时就此提出更多问题,我今天只是在家休息。
    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 2014-04-02
    • 2017-04-26
    • 1970-01-01
    • 2022-06-27
    • 2022-01-07
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多