Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:MoveToNext()上出现错误_Android_Sqlite_Cursor - Fatal编程技术网

Android:MoveToNext()上出现错误

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>

我试图在Android上使用SQLite数据库在一个表(ID,ID2,USER)上存储一个对象(ID,USER)

我已经设置了我的数据库,并在上面放了一些项目(5)。我使用ADB SHELL和SQLITE3命令进行了检查

当我希望使用以下方法获取所有项目时:

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;
}