我正在使用sqlite数据库制作多个测验应用程序。
我在rawquery中使用“ORDER BY RANDOM()”随机选择5行,但同一行有时会连续出现。
在某些情况下,它显示了5个不同的行。随机选择也可以正常工作,所以我的rawquery似乎工作正常。
我无法找出它在哪种情况下连续显示相同的问题和选择。 有没有人和我一样有问题?
这是我的代码。
public class QuizActivity extends Activity implements OnClickListener {
int Correct = 0;
int Cnt = 1;
String fieldinfo;
String question;
String answer;
String choice1;
String choice2;
private MySQLHelper mDbHelper;
private SQLiteDatabase db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
onQuestion();
}
public void onQuestion(){
mDbHelper = new MySQLHelper(this);
db = mDbHelper.getWritableDatabase();
try{
Cursor c = db.rawQuery("SELECT field, question, choice1, choice2, answer FROM WineQuiz ORDER BY RANDOM() LIMIT 5", null);
if(c.moveToFirst());
{
while(c.moveToNext()){
fieldinfo = c.getString(c.getColumnIndex("field"));
question = c.getString(c.getColumnIndex("question"));
choice1 = c.getString(c.getColumnIndex("choice1"));
choice2 = c.getString(c.getColumnIndex("choice2"));
answer = c.getString(c.getColumnIndex("answer"));
};
}
}catch(Exception e){
System.out.println("");;
}finally{
db.close();
}
ImageView image3 = (ImageView) findViewById(R.id.imageChoice1);
ImageView image4 = (ImageView) findViewById(R.id.imageChoice2);
TextView textChoice1 = (TextView) findViewById(R.id.textChoice1);
textChoice1.setText(choice1);
TextView textChoice2 = (TextView) findViewById(R.id.textChoice2);
textChoice2.setText(choice2);
image3.setOnClickListener(this);
image4.setOnClickListener(this);
}
public void onClick(View v){
switch(v.getId()){
case R.id.imageChoice1:
if(answer.equals(choice1)){
Correct++;
Toast.makeText(this, "Correct", Toast.LENGTH_SHORT ).show();
}else{
Toast.makeText(this, "Incorrect", Toast.LENGTH_SHORT ).show();
}
break;
case R.id.imageChoice2:
if(choice2.equals(answer)){
Correct++;
Toast.makeText(this, "Correct", Toast.LENGTH_SHORT ).show();
}else{
Toast.makeText(this, "Incorrect", Toast.LENGTH_SHORT ).show();
}
break;
}
if(Cnt==5){
Intent intent = new Intent(this, ResultActivity.class);
intent.putExtra("Correct", Correct );
startActivity(intent);
}else{
Cnt++;
onQuestion();
}
}
}
答案 0 :(得分:1)
rawQuery
调用返回一个有五个问题的游标,但是下面的循环会在每个循环迭代中覆盖变量(fieldinfo
等),所以你最终只得到最后一个的值五行。
(并且跳过了第一行,因为您在移动到第一行后调用了moveToNext
。)
无论何时调用onQuestion
,都不能保证查询返回相同的五行,因此每次最终都会有一些独立的随机行。< / p>
你必须在开头阅读所有五个问题(进入一个数组或类似的东西),然后逐个显示它们而不再查询数据库。