Android:MoveToNext()上出现错误
我试图在Android上使用SQLite数据库在一个表(ID,ID2,USER)上存储一个对象(ID,USER) 我已经设置了我的数据库,并在上面放了一些项目(5)。我使用ADB SHELL和SQLITE3命令进行了检查 当我希望使用以下方法获取所有项目时:Android:MoveToNext()上出现错误,android,sqlite,cursor,Android,Sqlite,Cursor,我试图在Android上使用SQLite数据库在一个表(ID,ID2,USER)上存储一个对象(ID,USER) 我已经设置了我的数据库,并在上面放了一些项目(5)。我使用ADB SHELL和SQLITE3命令进行了检查 当我希望使用以下方法获取所有项目时: public ArrayList<Discuss> getAllDiscuss(){ ArrayList<Discuss> discussList = new ArrayList<Discuss>
public ArrayList<Discuss> getAllDiscuss(){
ArrayList<Discuss> discussList = new ArrayList<Discuss>();
Cursor cursor = bdd.query(TABLE_DISCUSS, new String[] {COL_DISCUSS_ID, COL_DISCUSS_ID_SERVER, COL_ID_OTHERUSER}, null, null, null, null, null);
try {
if (cursor.moveToFirst()) {
do {
discussList.add(cursorToDiscuss(cursor));
} while (cursor.moveToNext());
}
} finally {
try { cursor.close(); } catch (Exception ignore) {}
}
return discussList;
}
GamAppSqliteBDD.java文件的第242行是:
} while (cursor.moveToNext());
有人能帮我理解并解决这个错误吗
如果使用以下代码,我也会出现此错误:
public ArrayList<Discuss> getAllDiscuss(){
ArrayList<Discuss> discussList = new ArrayList<Discuss>();
Cursor cursor = bdd.query(TABLE_DISCUSS, new String[] {COL_DISCUSS_ID, COL_DISCUSS_ID_SERVER, COL_ID_OTHERUSER}, null, null, null, null, null);
try {
if (cursor.moveToFirst()) {
// do {
discussList.add(cursorToDiscuss(cursor));
discussList.add(cursorToDiscuss(cursor));
// } while (cursor.moveToNext());
}
} finally {
try { cursor.close(); } catch (Exception ignore) {}
}
return discussList;
}
public ArrayList getalldiscussion(){
ArrayList discussList=新建ArrayList();
Cursor Cursor=bdd.query(表\u discussion,新字符串[]{COL\u discussion\u ID,COL\u discussion\u ID\u SERVER,COL\u ID\u OTHERUSER},null,null,null,null);
试一试{
if(cursor.moveToFirst()){
//做{
add(cursorToDiscuss(cursor));
add(cursorToDiscuss(cursor));
//}while(cursor.moveToNext());
}
}最后{
尝试{cursor.close();}捕获(异常忽略){}
}
返回讨论列表;
}
但是这次在第二行:discussList.add(cursorToDiscuss(cursor))代码>
谢谢你的阅读 [不推荐]我认为问题在于关闭光标。只需将游标.close()
放在注释中,然后再次运行
//cursor.close()
[推荐的]
错误在第行
02-04 23:48:25.333: E/AndroidRuntime(2122): Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT ID, Id_Server, Id_OtherUser FROM Table_Discuss)
它表示您正试图打开已关闭的对象。在这种情况下,您使用的是它的光标。即使在关闭光标之后,也可能有光标在运行
把你的代码按正确的顺序排列就可以了!干杯谢谢!你帮助我理解我的错误。我在我的方法cursortodiscus()中传递游标,它是:
private Discuss cursorToDiscuss(Cursor c){
if (c.getCount() == 0)
return null;
c.moveToFirst();
Discuss discuss = new Discuss();
discuss.setId(c.getInt(NUM_COL_DISCUSS_ID));
discuss.setIdServer(c.getInt(NUM_COL_DISCUSS_ID_SERVER));
discuss.setIdOtherUser(c.getInt(NUM_COL_ID_OTHERUSER));
c.close();
return discuss;
}
在这个方法中,我在返回我的对象之前关闭光标
我已在中修改了方法GetAllDiscussion():
public ArrayList getalldiscussion(){
ArrayList discussList=新建ArrayList();
Cursor Cursor=bdd.query(表\u discussion,新字符串[]{COL\u discussion\u ID,COL\u discussion\u ID\u SERVER,COL\u ID\u OTHERUSER},null,null,null,null);
试一试{
if(cursor.moveToFirst()){
做{
讨论=新讨论();
display.setId(cursor.getInt(NUM_COL_display_ID));
display.setIdServer(cursor.getInt(NUM_COL_display_ID_SERVER));
display.setIdOtherUser(cursor.getInt(NUM_COL_ID_OTHERUSER));
讨论列表。添加(讨论);
}while(cursor.moveToNext());
}
}最后{
尝试{cursor.close();}捕获(异常忽略){}
}
返回讨论列表;
}
它终于起作用了
感谢您的帮助:)发布您的光标todiscuss()
代码-很可能您正在关闭光标。很高兴帮助您,兄弟!!快乐编码
private Discuss cursorToDiscuss(Cursor c){
if (c.getCount() == 0)
return null;
c.moveToFirst();
Discuss discuss = new Discuss();
discuss.setId(c.getInt(NUM_COL_DISCUSS_ID));
discuss.setIdServer(c.getInt(NUM_COL_DISCUSS_ID_SERVER));
discuss.setIdOtherUser(c.getInt(NUM_COL_ID_OTHERUSER));
c.close();
return discuss;
}
public ArrayList<Discuss> getAllDiscuss(){
ArrayList<Discuss> discussList = new ArrayList<Discuss>();
Cursor cursor = bdd.query(TABLE_DISCUSS, new String[] {COL_DISCUSS_ID, COL_DISCUSS_ID_SERVER, COL_ID_OTHERUSER}, null, null, null, null, null);
try {
if (cursor.moveToFirst()) {
do {
Discuss discuss = new Discuss();
discuss.setId(cursor.getInt(NUM_COL_DISCUSS_ID));
discuss.setIdServer(cursor.getInt(NUM_COL_DISCUSS_ID_SERVER));
discuss.setIdOtherUser(cursor.getInt(NUM_COL_ID_OTHERUSER));
discussList.add(discuss);
} while (cursor.moveToNext());
}
} finally {
try { cursor.close(); } catch (Exception ignore) {}
}
return discussList;
}