我在我的应用程序中遇到问题时会问这个问题,我发现很难创建一个确切的问题。但我确实有领先优势。
我确实有并行线程在运行,我的问题围绕着在数据库上运行查询在初始化数据库实例上返回 NullpointerException 的情况。
所以我想知道的是,如果你在2个并行线程中通过 db.getWritableDatabase()初始化数据库实例,那么通过 db在一个线程中关闭数据库。 close(),在另一个帖子中关闭它?在整个应用程序级别?
答案 0 :(得分:1)
你应该创建SQLiteOpenHelper / db 的单例(你没有指定什么类 db ),它只返回一个实例,然后你可以检查db是否是是否关闭。
我有类似的问题,到底有2个并行线程和1个数据库?你在问问题。
您无法安全地同时使用数据库进行2次操作。
/**
* Returns a writable database instance in order not to open and close many
* SQLiteDatabase objects simultaneously
*
* @return a writable instance to SQLiteDatabase
*/
public SQLiteDatabase getMyWritableDatabase() {
if ((db == null) || (!db.isOpen())) {
db = this.getWritableDatabase();
}
return db;
}
@Override
public void close() {
super.close();
if (db != null) {
db.close();
db = null;
}
}