【问题标题】:android IllegalStateException, database already closedandroid IllegalStateException,数据库已经关闭
【发布时间】:2011-10-29 23:54:47
【问题描述】:

我正在使用 SimpleCursorAdapter 和数据库表来填充列表。列表被填充,我可以单击列表项以打开所需的项目(这将启动一个新活动)。问题是当我按返回键时,出现以下错误。

IllegalStateException: 数据库已经关闭。

我的代码如下:

public class populatingLectures extends ListActivity{

private static String[] FROM = {SUBJECT, TOPIC, LECTURENUMBER, DATE };
private static int[] TO = {R.id.subject, R.id.topic,
        R.id.lecturenumber, R.id.date };
private static String[] data = { SUBJECT, TOPIC, LECTURENUMBER, _DATA };
private static String ORDER_BY = DATE + " DESC";
private SoftCopyDatabase lectures;  
String gotId;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SoftCopyDatabase lectures = new SoftCopyDatabase(this);
    try {
        Cursor cursor = getLectures();
        showLectures(cursor);
    } finally {
        lectures.close();
    }
}

public void onStart() {
    super.onStart();
    lectures = new SoftCopyDatabase(this);
    try {
        Cursor cursor = getLectures();
        showLectures(cursor);
    } finally {
        lectures.close();
    }
}

private Cursor getLectures() {

    SQLiteDatabase db = lectures.getReadableDatabase();

    Cursor cursor = db.query(TABLE_NAME,null, "subject=?", new String[] {OpenClick.subjectName}, null, null,
            ORDER_BY);
    startManagingCursor(cursor);
    return cursor;
}


private void showLectures(Cursor cursor) {

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.item_lectures, cursor, FROM, TO);
    setListAdapter(adapter);
}

private Cursor getFileName(String ID) {

    SQLiteDatabase db = lectures.getReadableDatabase();
    Cursor cursor = db.query(TABLE_NAME, data, "_ID=?",
            new String[] { ID }, null, null, null);
    startManagingCursor(cursor);
    return cursor;
}


@Override
protected void onListItemClick(ListView listView, View view, int position,
        long id) {
    super.onListItemClick(listView, view, position, id);

             //...CODE TO START NEW ACTIVITY

    }
}


}

请告诉我我做错了什么。因为我没有在任何地方明确关闭数据库。

问候, 瓦内亚·伊克巴尔。

【问题讨论】:

    标签: android sqlite illegalstateexception


    【解决方案1】:
    finally
    {       
     lectures.close();
    }
    

    我认为这行给出了例外,所以把它放在onDestroy() 中。

    【讨论】:

    • 如果您认为正确,您可以投票或标记为正确答案。它对其他用户很有用。谢谢。
    【解决方案2】:

    您将在填充列表后立即关闭数据库。你应该移动

    lectures.close() 
    

    从 onStart() 到 onDestroy() 的行,这将确保您的数据库在活动完成时关闭,而不是在填充列表后立即关闭。

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 2012-10-19
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多