应用程序没有关闭在这里打开的游标或数据库对象: [英] Application did not close the cursor or database object that was opened here :

查看:106
本文介绍了应用程序没有关闭在这里打开的游标或数据库对象:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的code是:

 公共类EventDataSQLHelper扩展SQLiteOpenHelper {
    私有静态最后弦乐DATABASE_NAME =my.db;
}

公共类测试延伸活动{
    EventDataSQLHelper eventsData;

    @覆盖
    保护无效的onDestroy(){
        的System.out.println(的onDestroy);

        关闭();
        如果(DB!= NULL){

        db.close();

    }
    super.onDestroy();
}




公共无效的close(){
    eventsData.close();
}
 

我已经关闭了数据库在这里。在我所有的活动,除了这个它的工作(不例外所示)。这里,当我preSS后退按钮从本次测试活动的下方抛出异常

  02-14 15:59:34.642:ERROR /数据库(535):关闭()从来没有明确要求数据库/data/data/com.tesy.connect/databases /test.db
02-14 15:59:34.642:ERROR /数据库(535):android.database.sqlite.DatabaseObjectNotClosedException:应用程序没有关闭在这里打开的游标或数据库对象
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteDatabase< INIT>(SQLiteDatabase.java:1810)。
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
02-14 15:59:34.642:ERROR /数据库(535):在android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
02-14 15:59:34.642:ERROR /数据库(535):在android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)
02-14 15:59:34.642:ERROR /数据库(535):在com.connect.Test.getEvents(Connect_EY.java:755)
02-14 15:59:34.642:ERROR /数据库(535):在com.connect.Test.onCreate(Connect_EY.java:662)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)
02-14 15:59:34.642:ERROR /数据库(535):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)
02-14 15:59:34.642:ERROR /数据库(535):在android.os.Handler.dispatchMessage(Handler.java:99)
02-14 15:59:34.642:ERROR /数据库(535):在android.os.Looper.loop(Looper.java:123)
 

该异常被抛出这一getEvents行:

 公共类测试延伸活动{

    @覆盖
    公共无效的onCreate(包savedInstanceState){

    super.onCreate(savedInstanceState);
    的setContentView(R.layout.pageview);

    startRefreshActivity();
    尝试{/ *如果没有记录存在创建一个新的* /
    eventsData =新EventDataSQLHelper(本);
    光标光标= getEvents();
    startManagingCursor(光标);

    }
}

私人光标getEvents(){
    尝试 {
    DB = eventsData.getReadableDatabase();
    光标光标= db.query(EventDataSQLHelper.TABLE,NULL,NULL,
        NULL,NULL,NULL,NULL);
    startManagingCursor(光标);
    返回游标;
}赶上(例外前){
    的System.out.println(异常出现:+ ex.toString());
    返回null;
}

}
 

例外:

  02-14 15:59:34.642:ERROR /数据库(535):在com.testconnect.Test.getEvents(Test.java:755)
02-14 15:59:34.642:ERROR /数据库(535):在com.testconnect.Test.onCreate(Test.java:662)
 

解决方案

我解决了异常。我打电话

  DB = eventsData.getReadableDatabase();
 

两次,这就是为什么抛出异常

My code is :

public class EventDataSQLHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "my.db";
}

public class Test extends Activity {
    EventDataSQLHelper eventsData;

    @Override
    protected void onDestroy() {
        System.out.println("onDestroy");

        close();
        if (db!=null){

        db.close();

    }
    super.onDestroy();
}




public void close() {
    eventsData.close();
}

I have closed the db here.. In all my activities except this its working(no exception is shown).. Here when i press back button from this Test activity the below exception is thrown

02-14 15:59:34.642: ERROR/Database(535): close() was never explicitly called on database '/data/data/com.tesy.connect/databases/test.db' 
02-14 15:59:34.642: ERROR/Database(535): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
02-14 15:59:34.642: ERROR/Database(535):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
02-14 15:59:34.642: ERROR/Database(535):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
02-14 15:59:34.642: ERROR/Database(535):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
02-14 15:59:34.642: ERROR/Database(535):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
02-14 15:59:34.642: ERROR/Database(535):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
02-14 15:59:34.642: ERROR/Database(535):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-14 15:59:34.642: ERROR/Database(535):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
02-14 15:59:34.642: ERROR/Database(535):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)
02-14 15:59:34.642: ERROR/Database(535):     at com.connect.Test.getEvents(Connect_EY.java:755)
02-14 15:59:34.642: ERROR/Database(535):     at com.connect.Test.onCreate(Connect_EY.java:662)
02-14 15:59:34.642: ERROR/Database(535):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-14 15:59:34.642: ERROR/Database(535):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-14 15:59:34.642: ERROR/Database(535):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-14 15:59:34.642: ERROR/Database(535):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-14 15:59:34.642: ERROR/Database(535):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-14 15:59:34.642: ERROR/Database(535):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 15:59:34.642: ERROR/Database(535):     at android.os.Looper.loop(Looper.java:123)

The exception is thrown on this getEvents line :

public class Test extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.pageview);

    startRefreshActivity();
    try { /* If No Record Exists Create a New One */
    eventsData = new EventDataSQLHelper(this);
    Cursor cursor = getEvents();
    startManagingCursor(cursor);

    } 
}

private Cursor getEvents() {
    try {
    db = eventsData.getReadableDatabase();
    Cursor cursor = db.query(EventDataSQLHelper.TABLE, null, null,
        null, null, null, null);
    startManagingCursor(cursor);
    return cursor;
} catch (Exception ex) {
    System.out.println("Exception Occured : " + ex.toString());
    return null;
}

}

Exception :

02-14 15:59:34.642: ERROR/Database(535):     at com.testconnect.Test.getEvents(Test.java:755)
02-14 15:59:34.642: ERROR/Database(535):     at com.testconnect.Test.onCreate(Test.java:662)

解决方案

I resolved the exception. I was calling

 db = eventsData.getReadableDatabase(); 

twice thats why the exception is thrown

这篇关于应用程序没有关闭在这里打开的游标或数据库对象:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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