JDe*_*evs 5 android android-database android-room
我正在开发一个 Android 应用程序,使用 Room Database链接在本地保存数据。\n在简单的查询中,它工作正常。但是,当我循环遍历数据列表以在本地保存时,我得到 CursorWindowAllocationException。\n通过谷歌搜索,我应该像“cursor.close()”一样关闭光标,但是如何处理房间数据库中的光标?
\n\n谢谢你!
\n\n错误 :
\n\nCould not allocate CursorWindow \'/data/user/0/com.iSales/databases/isales_store\' of size 2097152 due to error -24.\nE/AndroidRuntime: FATAL EXCEPTION: AsyncTask #9\nProcess: com.iSales, PID: 10555\njava.lang.RuntimeException: An error occurred while executing doInBackground()\n at android.os.AsyncTask$3.done(AsyncTask.java:365)\n at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)\n at java.util.concurrent.FutureTask.setException(FutureTask.java:252)\n at java.util.concurrent.FutureTask.run(FutureTask.java:271)\n at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)\n at java.lang.Thread.run(Thread.java:784)\n Caused by: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. \n at android.database.CursorWindow.<init>(CursorWindow.java:110)\n at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)\n at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:138)\n at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:132)\n at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:219)\n at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:258)\n at com.iSales.database.dao.ServerDao_Impl.getActiveServer(ServerDao_Impl.java:478)\n at com.iSales.remote.ApiUtils.getISalesRYImg(ApiUtils.java:90)\n at com.iSales.task.FindAllVirtualProductsTask.doInBackground(FindAllVirtualProductsTask.java:72)\n at com.iSales.task.FindAllVirtualProductsTask.doInBackground(FindAllVirtualProductsTask.java:25)\n at android.os.AsyncTask$2.call(AsyncTask.java:345)\n at java.util.concurrent.FutureTask.run(FutureTask.java:266)\n at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)\xc2\xa0\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)\xc2\xa0\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)\xc2\xa0\n at java.lang.Thread.run(Thread.java:784)\nRun Code Online (Sandbox Code Playgroud)\n\n代码 :
\n\nfor (int i = 0; i < produitEntries.size(); i++) {\nthis.mDb = null;\nthis.mDb = AppDatabase.getInstance(this.context);\nif (!produitEntries.get(i).getRef().contains("C") && !produitEntries.get(i).getRef().contains("P")) {\n Call<ArrayList<ProductVirtual>> call = ApiUtils.getISalesRYImg(context).ryFindProductVirtual(produitEntries.get(i).getId());\n try {\n Response<ArrayList<ProductVirtual>> response = call.execute();\n Log.e(TAG, "JSon: " + toJSON(response.body()));\n if (response.isSuccessful()) {\n ArrayList<ProductVirtual> productVirtualArrayList = response.body();\n if (productVirtualArrayList.size() > 0) {\n for (int z = 0; z < productVirtualArrayList.size(); z++) {\n mDb.virtualProductDao().insertVirtualProduct(productVirtualArrayList.get(z));\n }\n } else {\n Log.e(TAG, "doInBackground: FindProductVirtualREST No Virtual Products");\n }\n }\n } catch (IOException e) {\n Log.e(TAG, "doInBackground: ********** IOException **********");\n Log.e(TAG, "URL: " + call.request().url());\n Log.e(TAG, "Message: " + e.getMessage());\n Log.e(TAG, "StackTrace: " + e.getStackTrace());\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n| 归档时间: |
|
| 查看次数: |
1787 次 |
| 最近记录: |