SQLiteDatabase android IllegalStateException [英] SQLiteDatabase android IllegalStateException
本文介绍了SQLiteDatabase android IllegalStateException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我使用android的Sqlite时遇到问题.日志告诉我:
i have a problem when i'm using the Sqlite of android. The log show me that :
SQLiteConnectionPool(1730): **The connection pool for /data/data/dev.xx.xx/databases/XX has been closed but there are still 1 connections in use. They will be closed as they are released back to the pool.**
08-02 14:15:41.490: D/AndroidRuntime(1730): Shutting down VM
08-02 14:15:41.490: W/dalvikvm(1730): threadid=1: thread exiting with uncaught exception (group=0xb4d74908)
08-02 14:15:41.510: E/AndroidRuntime(1730): FATAL EXCEPTION: main
08-02 14:15:41.510: E/AndroidRuntime(1730): **java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/dev.xx.xx/databases/XX**
08-02 14:15:41.510: E/AndroidRuntime(1730): at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
08-02 14:15:41.510: E/AndroidRuntime(1730): at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:520)
08-02 14:15:41.510: E/AndroidRuntime(1730): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:263)
08-02 14:15:41.510: E/AndroidRuntime(1730): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
08-02 14:15:41.510: E/AndroidRuntime(1730): at dev.xx.xx.SettingActivity$3.onClick(SettingActivity.java:205)
08-02 14:15:41.510: E/AndroidRuntime(1730): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
08-02 14:15:41.510: E/AndroidRuntime(1730): at android.os.Handler.dispatchMessage(Handler.java:99)
08-02 14:15:41.510: E/AndroidRuntime(1730): at android.os.Looper.loop(Looper.java:137)
08-02 14:15:41.510: E/AndroidRuntime(1730): at android.app.ActivityThread.main(ActivityThread.java:5039)
08-02 14:15:41.510: E/AndroidRuntime(1730): at java.lang.reflect.Method.invokeNative(Native Method)
08-02 14:15:41.510: E/AndroidRuntime(1730): at java.lang.reflect.Method.invoke(Method.java:511)
08-02 14:15:41.510: E/AndroidRuntime(1730): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-02 14:15:41.510: E/AndroidRuntime(1730): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
当我尝试致电时会出现此错误:
This error come when i try to call :
public class DataBase extends SQLiteOpenHelper {
...
void addUser(String who, String time, String table, String phone) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, who);
values.put(KEY_PHONE, phone);
values.put(KEY_TABLE_RES, table);
values.put(KEY_TIME, time);
db.insert(TABLE_RESERVATION, null, values);
db.close(); // Closing database connection
}
....
}
我想是当func调用时:
I thing it's when the func call that :
this.getWritableDatabase()
this.getWritableDatabase()
推荐答案
我不认为您每次都应该得到一个这样的新SQLiteDatabase实例.您想在SQLiteOpenHelper中保留对SQLiteDatabase对象的引用.您的SQLiteOpenHelper的结构应类似于以下内容:
I don't believe you should be getting a new SQLiteDatabase instance like that every time. You want to keep a reference to the SQLiteDatabase object in your SQLiteOpenHelper. Your SQLiteOpenHelper should be constructed something more like the following:
public class DataBase extends SQLiteOpenHelper {
...
private SQLiteDatabase mDatabase;
@Override
public void onCreate(SQLiteDatabase db) {
...
mDatabase = db;
...
}
void addUser(String who, String time, String table, String phone) {
ContentValues values = new ContentValues();
values.put(KEY_NAME, who);
values.put(KEY_PHONE, phone);
values.put(KEY_TABLE_RES, table);
values.put(KEY_TIME, time);
mDatabase.insert(TABLE_RESERVATION, null, values);
}
....
}
这篇关于SQLiteDatabase android IllegalStateException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文