Android SQLite geschlossen Ausnahme
Habe ich keine hintergrund-Synchronisation. Ich denke dieses Problem wird behoben, wenn ich synchronisiert Methode. Aber kann mir jemand helfen um dieses Problem zu beheben? Code ist unten:
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;
}
Verschiedenen threads diese Methode aufrufen kann getAllRecordsInList_HashMap()
. Bitte beraten, wie dieses Problem zu beheben, wenn ich die synchronisierte Methode. Wird es behoben werden?
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)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Dianne Hackborn (Android framework engineer) es gibt keine Notwendigkeit, schließen Sie die Datenbank in einem content-provider
So gibt es keine Notwendigkeit zu schließen der Datenbank . es wird automatisch schließen, wenn es nicht benötigt wird.
Sollten Sie nicht in der Nähe der DB, da es wieder verwendet und auf den nächsten Anruf. So versuchen, entfernen Sie die
aus dem code.