这是我的代码,Cursor cursor= db.rawQuery
是原因。我的应用程序一直在崩溃
请告诉我错误: -
public QuestionController(Context context) {
dbHelper= new DBHelper(context);
}
//Lấy danh sách câu hỏi
public ArrayList<Question> getQuestion(int num_exam, String subject){
ArrayList<Question> lsData= new ArrayList<Question>();
SQLiteDatabase db= dbHelper.getReadableDatabase();
Cursor cursor= db.rawQuery("SELECT * FROM tracnghiem WHERE num_exam = '"+ num_exam+"' AND subject='"+subject+"' ORDER BY random()",null);
cursor.moveToFirst();
do {
Question item;
item= new Question(cursor.getInt(0), cursor.getString(1),cursor.getString(2),cursor.getString(3),
cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getInt(7),cursor.getString(8),cursor.getString(9),"");
lsData.add(item);
}while (cursor.moveToNext());
cursor.close();
return lsData;
答案 0 :(得分:0)
不确定,但你可以尝试这些,
db.rawQuery("SELECT * FROM tracnghiem WHERE num_exam = ? AND subject=? ORDER BY random()", new String[] {num_exam,subject});
答案 1 :(得分:0)
不是肯定是问题,但是你不应该假设Cursor不是空的,不检查moveToFirst
方法的结果。如果无法进行移动,则moveToFist
将返回false。如果光标是空的。
如果光标为空,moveToFist
将不会失败但是,当您尝试访问游标的第0行时,尝试通过get????
方法检索数据将失败,并出现行索引错误当没有第0行时。
同样不是说这绝对是你遇到的错误。但是你应该替换: -
cursor.moveToFirst();
do {
Question item;
item= new Question(cursor.getInt(0), cursor.getString(1),cursor.getString(2),cursor.getString(3),
cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getInt(7),cursor.getString(8),cursor.getString(9),"");
lsData.add(item);
}while (cursor.moveToNext());
cursor.close();
使用类似的东西(如果光标不为空,这将循环通过光标,如果光标为空则不会失败): -
while (cursor.moveToNext) {
Question item;
item= new Question(cursor.getInt(0), cursor.getString(1),cursor.getString(2),cursor.getString(3),
cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getInt(7),cursor.getString(8),cursor.getString(9),"");
lsData.add(item);
}
cursor.close();
如果Cursor本身为空,请注意lsData没有元素。您可以在cursor.close()
之后和return lsData
之后添加以下内容: -
if (lsData.size) < 1) {
lsData.add(new Question(0,"Empty Cursor","","","","","",0,"".""."");
}
然后可以很容易地看出Cursor是否为空。
答案 2 :(得分:0)
我认为问题在于这一行,在行cursor.moveToFirst();
之前检查一个条件。
if(cursor!=null && cursor.getCount() > 0){
if(cursor.moveToFirst()){
//your process for fetching row.
}
}
答案 3 :(得分:0)
在您的情况下,崩溃应用程序只能有3个泄漏,
cursor
返回0行。