如何随机设置文本按钮从SQLite的不重复? [英] How to randomly set text to buttons from SQLite without repetition?

查看:99
本文介绍了如何随机设置文本按钮从SQLite的不重复?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须导入到资产分贝,我从中读取和随机设置文本按钮和一个texview,低于code:

I have a db imported to assets, and i read from it and randomly set text to buttons and a texview, with code below:

mDbHelper.open();  

            Cursor c = mDbHelper.getTestData();

            List<Answer> labels = new ArrayList<Answer>();

            labels.add(new Answer(c.getString(2), true));
            labels.add(new Answer(c.getString(3), false));
            labels.add(new Answer(c.getString(4), false));
            labels.add(new Answer(c.getString(5), false));

            Collections.shuffle(labels);

question.setText(c.getString(1));

        bOdgovor1.setText(labels.get(0).option);
        bOdgovor1.setTag(labels.get(0));
        bOdgovor1.setOnClickListener(clickListener);

        bOdgovor2.setText(labels.get(1).option);
        bOdgovor2.setTag(labels.get(1));
        bOdgovor2.setOnClickListener(clickListener);

        bOdgovor3.setText(labels.get(2).option);
        bOdgovor3.setTag(labels.get(2));
        bOdgovor3.setOnClickListener(clickListener);

        bOdgovor4.setText(labels.get(3).option);
        bOdgovor4.setTag(labels.get(3));
        bOdgovor4.setOnClickListener(clickListener);

下面是我的TestAdapter code为DB:

Here's my TestAdapter code for db:

public Cursor getTestData()
     {;
         try
         {
             String sql ="SELECT * FROM tblPitanja ORDER BY RANDOM() LIMIT 1";

             Cursor mCur = mDb.rawQuery(sql, null);
             if (mCur!=null)
             {
                mCur.moveToNext();
             }
             return mCur;
         }
         catch (SQLException mSQLException) 
         {
             Log.e(TAG, "getTestData >>"+ mSQLException.toString());
             throw mSQLException;
         }
     }

它完美,当涉及到设置问题按钮,但问题重复。如何避免呢?

It works perfectly when it comes to setting questions to buttons, but questions repeat. How to avoid that?

推荐答案

有更多的为您解决问题的方法:

there are more approaches to solve your problem:


  1. 执行的SQL语句(非限制性)在开始和当quesion回答正确移动光标的下一个条目

  2. 缓冲区,在那里已经回答
  3. 问题

第二种方法可以做如下:

the second approach could be done as follows:

首先,改变你的方法和SQL在内的where子句:

first, change your method and sql, including a where-clause:

public Cursor getTestData(String whereClause)
 {;
     try
     {
         String sql ="SELECT * FROM tblPitanja WHERE 1 = 1 " + whereClause + " ORDER BY RANDOM() LIMIT 1";
         [...]

第二,缓冲在你的游戏级已经回答问题:

second, buffer the already answered questions in your game-class:

添加一个链表到您的游戏级

add a LinkedList to your game-class

LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>();

添加已经回答问题LinkedList的:

add already answered questions to the LinkedList:

Cursor c = mDbHelper.getTestData(generateWhereClause());
mAnsweredQuestions.add(c.getLong(0));
List<Answer> labels = new ArrayList<Answer>();
[...]

添加产生的where子句的函数:

add a function which generates the where-clause:

private String generateWhereClause(){
    StringBuilder result = new StringBuilder();
    for (Long l : mAnsweredQuestions){
         result.append(" AND " + YOURID + " <> " + l);
    }
    return result.toString();
}

这篇关于如何随机设置文本按钮从SQLite的不重复?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆