0

我在我的数据库中找不到导致此错误的原因,我在与此问题相关之前发布了一些问题,但由于代码很长,我删除了其中一些具有相同声明的问题,因为 stackoverflow 不允许我发布超过3000 个字符。我尝试使用此方法关闭光标,但不知何故它不能解决问题。

public Cursor getMove(){
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};

    Cursor c = null;
    try {
        c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
    } finally {
        if(c != null){
            c.close();
        }
    }
    return c;
}

无论如何[这里是]全班我希望有人能帮助我。

4

2 回答 2

0

关闭光标是我收到此错误的原因,而不是这个:

public Cursor getMove(){
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};

    Cursor c = null;
    try {
        c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
    } finally {
        if(c != null){
            c.close();
        }
    }
    return c;
}

我刚刚使用了这行代码:

public Cursor getMove(){
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};

    Cursor c = null;
    c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
    return c;
}
于 2012-10-22T07:10:15.743 回答
0

原因可能是您正在使用数据库连接的多个实例并且没有关闭您分发的所有游标。您接受的(您自己的)答案可能很危险。您是否正在释放从该方法中分发的游标?你最终会在手机上占用宝贵的资源,如果你不这样做,这些资源永远不会被释放。

您可以通过维护一个数据库实例(通过使用单例来处理数据库连接)并最终关闭所有游标来解决此问题。要么将它们编组为 POJO 并立即关闭游标,要么发送回游标并通过调用activity.managedQuery(). 您可能还想查看 android 的SQL lite 锁定机制。

于 2012-10-22T07:23:47.837 回答