[英]Android- java.lang.IllegalStateException:
我有一個在后台運行的服務,可以訪問(讀取和寫入)sqlite數據庫。 這將執行應用程序的同步過程。 相應的前台進程(主應用程序)也可以訪問(讀取和寫入)我的Android應用程序中的sqlite數據庫。
當正在進行同步過程並且用戶嘗試使用前台進程訪問數據庫時,將出現此錯誤。 我使用同步來鎖定sqlite db,但是仍然出現此錯誤。
synchronized (obj) {
blogDbAdapter.open();
todayBlogs = blogDbAdapter.getBlogsByDate(today, today, me, activity);
blogDbAdapter.close();
}
這是錯誤:
10-24 00:41:11.134: E/AndroidRuntime(1627): FATAL EXCEPTION: main
Process: com.eyepax.horseapp, PID: 1627
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:144)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237)
at com.eyx.hor.data.dbadapters.BlogDbAdapter.getBlogsByDate(BlogDbAdapter.java:172)
at com.eyx.hor.data.DataManager.getTodayBlogs(DataManager.java:2693)
at com.eyx.hor.ui.activities.BlogListView.setDataAdapter(BlogListView.java:239)
at com.eyx.hor.ui.activities.BlogListView.onCreateView(BlogListView.java:92)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:450)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
這是getBlogsByDate(),
public ArrayList<Blog> getBlogsByDate(java.util.Date fromDateU, java.util.Date toDateU, boolean me, Activity activity) {
Date fromDate = new java.sql.Date(fromDateU.getTime());
Date toDate = new java.sql.Date(toDateU.getTime());
this.open();
Cursor cursor = null;
if (me) {
String user = CommonUtils.getFromSharedPreference("USER_ID", "0", activity);
cursor = database.rawQuery("select * from " + TABLE_NAME + " where date(" + DATE + ") BETWEEN '" + fromDate + "' AND '" + toDate + "' AND " + USER
+ " = " + user, null);
} else {
cursor = database.rawQuery("select * from " + TABLE_NAME + " where date(" + DATE + ") BETWEEN '" + fromDate + "' AND '" + toDate + "'", null);
}
ArrayList<Blog> list = null;
if (cursor != null && cursor.moveToFirst()) {
list = new ArrayList<Blog>();
do {
Blog blog = new Blog();
blog.setBlogId(cursor.getString(cursor.getColumnIndex(BLOG_ID)));
blog.setTitle(cursor.getString(cursor.getColumnIndex(TITLE)));
blog.setDescription(cursor.getString(cursor.getColumnIndex(DESCRIPTION)));
blog.setImageUrl(cursor.getString(cursor.getColumnIndex(IMAGE_URL)));
blog.setDate(cursor.getString(cursor.getColumnIndex(DATE)));
blog.setUser(cursor.getString(cursor.getColumnIndex(USER)));
blog.setUserImageUrl(cursor.getString(cursor.getColumnIndex(USER_IMAGE_URL)));
blog.setGroupId(cursor.getString(cursor.getColumnIndex(GROUP_ID)));
list.add(blog);
} while (cursor.moveToNext());
}
if (cursor != null)
cursor.close();
return list;
}
錯誤提示:
java.lang.IllegalStateException:無法執行此操作,因為連接池已關閉。
然后,您需要打開連接。
嘗試使用:
synchronized (obj) {
blogDbAdapter.open();
todayBlogs = blogDbAdapter.getBlogsByDate(today, today, me, activity);
blogDbAdapter.close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.