簡體   English   中英

Android- java.lang.IllegalStateException:

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM