这里我试图过滤Sqlite数据库但这个查询不起作用。它什么也没显示。请帮我弄清楚我做错了什么? 谢谢!
public ArrayList<Listcollection> listafterfilter(String s) {
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<Listcollection> results = new ArrayList<Listcollection>();
Cursor crs = null;
while (crs.moveToNext()) {
if(s == null || s.length() ==0){
crs = db.query(CONTACTS_TABLE_NAME, new String[]{C_NAME, C_PHONE , C_TYPE ,C_ADDRESS ,C_DATE,C_PNAME,C_CDATE , C_MNO ,C_DNAME ,C_DPHONE ,
C_TSCHARGE ,C_DAMOUNT ,C_FANDSOL, C_TRNO, C_TCRAMOUNT }, null, null, null,null, null);
Listcollection item = new Listcollection();
item.setId(crs.getInt(crs.getColumnIndex(CONTACTS_COLUMN_ID)));
item.setName(crs.getString(crs.getColumnIndex(C_NAME)));
item.setCdate(crs.getString(crs.getColumnIndex(C_CDATE)));
item.setType(crs.getString(crs.getColumnIndex(C_TYPE)));
results.add(item);
}
else {
crs = db.query(true,CONTACTS_TABLE_NAME, new String[]{C_NAME, C_PHONE , C_TYPE ,C_ADDRESS ,C_DATE,C_PNAME,C_CDATE , C_MNO ,C_DNAME ,C_DPHONE ,
C_TSCHARGE ,C_DAMOUNT ,C_FANDSOL, C_TRNO, C_TCRAMOUNT }, " like '%"+s+"%'",null, null,null, null, null);
Listcollection item = new Listcollection();
item.setId(crs.getInt(crs.getColumnIndex(CONTACTS_COLUMN_ID)));
item.setName(crs.getString(crs.getColumnIndex(C_NAME)));
item.setCdate(crs.getString(crs.getColumnIndex(C_CDATE)));
item.setType(crs.getString(crs.getColumnIndex(C_TYPE)));
results.add(item);
}
}
db.close();
return results;
}
答案 0 :(得分:1)
您已声明了光标
Cursor crs = null;
当它为空时,你试图遍历或循环光标
while (crs.moveToNext())
你还有另外一个问题,即使你解决了这个问题,还有一个问题。
在循环游标时,您无法再次修改。
crs = db.query(CONTACTS_TABLE_NAME, new String[]{C_NAME, C_PHONE , C_TYPE ,C_ADDRESS ,C_DATE,C_PNAME,C_CDATE , C_MNO ,C_DNAME ,C_DPHONE ,
C_TSCHARGE ,C_DAMOUNT ,C_FANDSOL, C_TRNO, C_TCRAMOUNT }, null, null, null,null, null);
您需要再声明一个游标
Cursor crs = null;
Cursor queryCrs = null;
while (crs.moveToNext())
queryCrs = db.query(CONTACTS_TABLE_NAME, new String[]{C_NAME, C_PHONE , C_TYPE ,C_ADDRESS ,C_DATE,C_PNAME,C_CDATE , C_MNO ,C_DNAME ,C_DPHONE ,
C_TSCHARGE ,C_DAMOUNT ,C_FANDSOL, C_TRNO, C_TCRAMOUNT }, null, null, null,null, null);