相关疑难解决方法(0)

在ContentProvider中关闭数据库

本周我一直在学习有关ContentProvider的所有内容,并使用SQLiteOpenHelper类来管理提供程序内部数据库的创建和升级.具体来说,我一直在阅读sdk的samples目录中的NotePad示例.

现在,我可以看到SQLiteOpenHelper有一个close()方法.我知道将空闲数据库打开是不好的做法,可能导致内存泄漏等等(除非这个讨论朝着正确的方向发展).如果我在Activity中使用该类,那么我只需在onDestroy()方法中调用close(),但据我所知,ContentProvider与活动没有相同的生命周期.NotePad的代码似乎永远不会调用close(),所以我想假设它是由SQLiteOpenHelper或其他一些拼图处理的,但我真的很想知道.我真的不太相信示例代码,要么...

问题摘要:我们何时应该关闭提供商中的数据库,如果有的话?

sqlite android android-contentprovider

73
推荐指数
4
解决办法
2万
查看次数

Android SQLite关闭异常

我没有扎实的同步背景.我认为当我使用synchronized方法时,这个问题将得到修复.但有人可以帮我解决这个问题吗?代码如下:

public HashMap<String, FriendInfo> getAllRecordsInList_HashMap() {

        MySQLiteHelper dbHelper = MySQLiteHelper.getInstance(mActivity);
        HashMap<String, FriendInfo> list_map = new HashMap<String, FriendInfo>();

        SQLiteDatabase db = dbHelper.getReadableDatabase();
        // Cursor cursor = db.rawQuery("SELECT * from " +
        // dbHelper.tbl_friendlist, new String[] {});
        String[] cols = { dbHelper.id, dbHelper.name, dbHelper.picture, dbHelper.birthday, dbHelper.livein, dbHelper.gender, dbHelper.is_online, dbHelper.is_vip };
        Cursor cursor = db.query(dbHelper.tbl_friendlist, cols, null, null, null, null, dbHelper.name);

        if (cursor != null && cursor.getCount() > 0) {

            // some code here....
        }
        cursor.close();
        return list_map;
    }
Run Code Online (Sandbox Code Playgroud)

不同的线程可以调用此方法getAllRecordsInList_HashMap() …

android android-sqlite

12
推荐指数
2
解决办法
2万
查看次数

如何安全地关闭光标和数据库?

我使用Cursor从数据库中获取记录.这是完美的工作.但是,当我使用这段代码时,我在Logcat中遇到了一些错误

public Cursor fetchAll()
{
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(t1, new String[] {"_id",name, date, prior, time, dateformat}, null, null, null, null, prior); 
    return cursor;
}
Run Code Online (Sandbox Code Playgroud)

我的logcat是 -

12-16 14:49:20.774: E/Database(18611): close() was never explicitly called on database '/data/data/com.android.application/databases/appZ.db' 
12-16 14:49:20.774: E/Database(18611): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
12-16 14:49:20.774: E/Database(18611):  at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
12-16 14:49:20.774: E/Database(18611):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
12-16 14:49:20.774: E/Database(18611):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
12-16 14:49:20.774: E/Database(18611):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
12-16 14:49:20.774: …
Run Code Online (Sandbox Code Playgroud)

database android cursor

9
推荐指数
1
解决办法
2万
查看次数