安卓IllegalStateException异常,数据库已经关闭 [英] android IllegalStateException, database already closed

查看:137
本文介绍了安卓IllegalStateException异常,数据库已经关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用SimpleCursorAdapter和数据库表来填充列表。该列表被填充,我可以点击列表中的项目,打开所需的项目(这将启动一个新的活动)。问题是,当我preSS返回键,我得到了下面的错误。

IllegalStateException异常:数据库已关闭

我的code是如下:

 公共类populatingLectures扩展ListActivity {

私有静态的String [] FROM = {主语,话题,LECTURENUMBER,DATE};
私有静态诠释[] TO = {R.id.subject,R.id.topic,
        R.id.lecturenumber,R.id.date};
私有静态的String []数据= {主语,话题,LECTURENUMBER,_DATA};
私有静态字符串ORDER_BY = DATE +DESC;
私人SoftCopyDatabase讲座;
字符串gotId;


@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    SoftCopyDatabase讲座=新SoftCopyDatabase(本​​);
    尝试 {
        光标光标= getLectures();
        showLectures(光标);
    } 最后 {
        lectures.close();
    }
}

公共无效的OnStart(){
    super.onStart();
    讲座=新SoftCopyDatabase(本​​);
    尝试 {
        光标光标= getLectures();
        showLectures(光标);
    } 最后 {
        lectures.close();
    }
}

私人光标getLectures(){

    SQLiteDatabase DB = lectures.getReadableDatabase();

    光标光标= db.query(TABLE_NAME,空科目=?,新的String [] {} OpenClick.subjectName,NULL,NULL,
            ORDER_BY);
    startManagingCursor(光标);
    返回游标;
}


私人无效showLectures(光标指针){

    SimpleCursorAdapter适配器=新SimpleCursorAdapter(这一点,
            R.layout.item_lectures,光标,发件人,收件人);
    setListAdapter(适配器);
}

私人光标getFileName(字符串ID){

    SQLiteDatabase DB = lectures.getReadableDatabase();
    光标光标= db.query(TABLE_NAME,数据,_ID =?,
            新的String [] {ID},NULL,NULL,NULL);
    startManagingCursor(光标);
    返回游标;
}


@覆盖
保护无效onListItemClick(ListView控件的ListView,视图中查看,INT位置,
        长ID){
    super.onListItemClick(ListView控件,观点,立场,身份证);

             //...$c$c TO开始新的活动

    }
}


}
 

请告诉我什么错误,我在做。因为我不是关闭数据库明确任何地方。

问候, Waneya伊克巴尔。

解决方案

 最后
{
 lectures.close();
}
 

我觉得这行给出了异常,因此将其放在的onDestroy()

I am using SimpleCursorAdapter and database table to populate a List. The list gets populated and I am able to click on list items to open the desired item(This starts a new activity). The problem is when I press the back key, I got Following error.

IllegalStateException: database already closed.

My code is as follows:

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

    }
}


}

Kindly tell me what mistake am I doing. Because I am not closing the database explicitly any where.

Regards, Waneya Iqbal.

解决方案

finally
{       
 lectures.close();
}

I think this line gives the exception, so put it in onDestroy().

这篇关于安卓IllegalStateException异常,数据库已经关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆