gpt4 book ai didi

Android SQLite关闭异常

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:49:18 25 4
gpt4 key购买 nike

我没有扎实的同步背景。我认为当我使用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;
}

不同线程可以调用此方法getAllRecordsInList_HashMap()。如果我使用同步方法,请告知如何解决此问题。会修复吗?

java.lang.IllegalStateException: Cannot perform this operation 
because the connection pool has been closed.

at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked(SQLiteConnectionPool.java:962)
at android.database.sqlite.SQLiteConnectionPool.waitForConnection(SQLiteConnectionPool.java:599)
at android.database.sqlite.SQLiteConnectionPool.acquireConnection(SQLiteConnectionPool.java:348)
at android.database.sqlite.SQLiteSession.acquireConnection(SQLiteSession.java:894)
at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:834)
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at com.platinumapps.friendlist.BLL_Friendlist.getAllRecordsInList_HashMap(BLL_Friendlist.java:290)
at com.platinumapps.activities.Messages_Activity.addViewTOLayout(Messages_Activity.java:753)
at com.platinumapps.activities.Messages_Activity.access$3(Messages_Activity.java:744)
at com.platinumapps.activities.Messages_Activity$1$3.run(Messages_Activity.java:141)
at ndroid.app.Activity.runOnUiThread(Activity.java:4644)
at com.platinumapps.activities.Messages_Activity$1.onReceive(Messages_Activity.java:136)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:758)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5039)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

根据 Dianne Hackborn (Android framework工程师)content provider中不需要关闭数据库

A content provider is created when its hosting process is created, and remains around for as long as the process does, so there is no need to close the database it will get closed as part of the kernel cleaning up the process's resources when the process is killed.

所以没有必要关闭数据库。它会在不需要时自动关闭。

关于Android SQLite关闭异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14002022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com