在Parse中的“本地数据存储”功能可用之前,我曾经拥有自己的本地数据库供离线应用程序使用.我认为一切正常,直到我决定将主屏幕小部件及其应用程序的服务和从该本地数据库提供的列表视图添加到我的应用中.一段时间后,我开始从用户那里得到一些错误(光标分配,#打开的游标),我认为这是一个小问题,可能是由于电话问题等引起的,但后来我自己开始遇到这些问题……我试图解决这些问题以SO中建议的各种可能方式,各种解决方案,尝试关闭指向数据库的所有内容,尝试/捕获内容等,什么都没有.所以几个月后,我放弃了,对自己说,就是使用Parse的Local DataStore,我敢肯定它比我的sqlite实现要好.
大概是一个月前,我以为事情已经解决了,但是今天却出现了这个错误,即使没有使用该应用程序,该错误也会出现.我停止了应用程序和服务,重新启动/关闭了电源,但是当手机解锁时它仍然存在,并且由于今天下午由于该原因无法打开应用程序,因此它是恒定不变的.
我不知道如何解决它,这是4个月的噩梦.希望有所帮助,谢谢.
07-21 19:01:29.360: E/CursorWindow(17106): Could not allocate CursorWindow '/data/data/com.xoaquin.r07d/databases/ParSEOfflinestore' of size 2097152 due to error -12.07-21 19:01:29.470: E/CursorWindow(17106): Could not allocate CursorWindow '/data/data/com.xoaquin.r07d/databases/ParSEOfflinestore' of size 2097152 due to error -12.07-21 19:01:29.480: E/AndroIDRuntime(17106): FATAL EXCEPTION: main07-21 19:01:29.480: E/AndroIDRuntime(17106): Process: com.xoaquin.r07d, PID: 1710607-21 19:01:29.480: E/AndroIDRuntime(17106): java.lang.RuntimeException: Unable to create application com.xoaquin.r07d.DefaultApplication: androID.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb Failed. # Open Cursors=582 (# cursors opened by this proc=582)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.app.ActivityThread.handleBindApplication(ActivityThread.java:4471)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.app.ActivityThread.access00(ActivityThread.java:145)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1266)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.os.Handler.dispatchMessage(Handler.java:102)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.os.Looper.loop(Looper.java:136)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.app.ActivityThread.main(ActivityThread.java:5141)07-21 19:01:29.480: E/AndroIDRuntime(17106): at java.lang.reflect.Method.invokeNative(Native Method)07-21 19:01:29.480: E/AndroIDRuntime(17106): at java.lang.reflect.Method.invoke(Method.java:515)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:611)07-21 19:01:29.480: E/AndroIDRuntime(17106): at dalvik.system.NativeStart.main(Native Method)07-21 19:01:29.480: E/AndroIDRuntime(17106): Caused by: androID.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb Failed. # Open Cursors=582 (# cursors opened by this proc=582)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.database.CursorWindow.<init>(CursorWindow.java:104)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.database.AbstractwindowedCursor.clearOrCreateWindow(AbstractwindowedCursor.java:198)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.database.sqlite.sqliteCursor.fillWindow(sqliteCursor.java:139)07-21 19:01:29.480: E/AndroIDRuntime(17106): at androID.database.sqlite.sqliteCursor.getCount(sqliteCursor.java:133)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.ParsesqliteDatabase.then(ParsesqliteDatabase.java:214)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.ParsesqliteDatabase.then(ParsesqliteDatabase.java:205)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.Task.run(Task.java:481)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.Task$ImmediateExecutor.execute(Task.java:673)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.Task.completeAfterTask(Task.java:477)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.Task.continueWithTask(Task.java:353)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.Task.continueWithTask(Task.java:364)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.Task.then(Task.java:410)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.Task.then(Task.java:402)07-21 19:01:29.480: E/AndroIDRuntime(17106): at com.parse.Task.run(Task.java:481)07-21 19:01:29.480: E/AndroIDRuntime(17106): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)07-21 19:01:29.480: E/AndroIDRuntime(17106): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)07-21 19:01:29.480: E/AndroIDRuntime(17106): at java.lang.Thread.run(Thread.java:841)07-21 19:01:29.551: E/CursorWindow(17106): Could not allocate CursorWindow '/data/data/com.xoaquin.r07d/databases/ParSEOfflinestore' of size 2097152 due to error -12.07-21 19:01:38.119: E/WindowManager(674): Starting window AppWindowToken{4312f298 token=Token{42bd2558 ActivityRecord{42538230 u0 com.xoaquin.r07d/.MainActivity t57}}} timed out
以下是我在更改为“解析本地数据存储”之前使用自己的sqlite实现时遇到的错误:
java.lang.RuntimeException: Unable to create application com.xoaquin.r07d.DefaultApplication: androID.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb Failed. # Open Cursors=762 (# cursors opened by this proc=762)at androID.app.ActivityThread.handleBindApplication(ActivityThread.java:4428)at androID.app.ActivityThread.access00(ActivityThread.java:139)at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)at androID.os.Handler.dispatchMessage(Handler.java:102)at androID.os.Looper.loop(Looper.java:136)at androID.app.ActivityThread.main(ActivityThread.java:5102)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)Caused by: androID.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb Failed. # Open Cursors=762 (# cursors opened by this proc=762)at androID.database.CursorWindow.<init>(CursorWindow.java:104)at androID.database.AbstractwindowedCursor.clearOrCreateWindow(AbstractwindowedCursor.java:198)at androID.database.sqlite.sqliteCursor.fillWindow(sqliteCursor.java:139)at androID.database.sqlite.sqliteCursor.getCount(sqliteCursor.java:133)at com.parse.ParsesqliteDatabase.then(ParsesqliteDatabase.java:214)at com.parse.ParsesqliteDatabase.then(ParsesqliteDatabase.java:205)at com.parse.Task.run(Task.java:481)at com.parse.Task$ImmediateExecutor.execute(Task.java:673)at com.parse.Task.completeAfterTask(Task.java:477)at com.parse.Task.continueWithTask(Task.java:353)at com.parse.Task.continueWithTask(Task.java:364)at com.parse.Task.then(Task.java:410)at com.parse.Task.then(Task.java:402)at com.parse.Task.run(Task.java:481)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)at java.lang.Thread.run(Thread.java:841)
在我的应用程序类的代码下面,这是我自己的代码中唯一在错误中提到的类(也许那里是错误的):
public class DefaultApplication extends Application{ private static Context context; @OverrIDe public voID onCreate() { super.onCreate(); String manufacturer = Build.MANUFACTURER; String brand = Build.BRAND; String product = Build.PRODUCT; String model = Build.MODEL; Parse.enableLocalDatastore(this); Parse.initialize(this, "KfBj6ivkLAaYqo", "ePZ6T7RmvGGw3"); PushService.setDefaultPushCallback(this, MainActivity.class); ParseFacebookUtils.initialize("75589"); PushService.subscribe(this, "todos", MainActivity.class); ParseUser cu = ParseUser.getCurrentUser(); if(cu!=null){ String nombretablausuario=cu.getUsername(); if(nombretablausuario!=null){ if (nombretablausuario.contains("\.")||nombretablausuario.contains("@")){ nombretablausuario=nombretablausuario.replaceAll("\.", ""); nombretablausuario=nombretablausuario.replaceAll("@", ""); } PushService.subscribe(this, nombretablausuario,MainActivity.class); } ParseInstallation installation = ParseInstallation.getCurrentInstallation(); installation.put("actualuser",cu.getUsername()); installation.put("manufacturer", manufacturer); installation.put("brand", brand); installation.put("product", product); installation.put("model", model); installation.saveEventually(); } String locale = getResources().getConfiguration().locale.getdisplayname(); if(locale.contains("espa\u00F1ol")){ PushService.subscribe(this, "jalert", JalertActivity.class); PushService.unsubscribe(this, "jalerting"); }else{ PushService.subscribe(this, "jalerting", JalertActivity.class); PushService.unsubscribe(this, "jalert"); } context=getApplicationContext(); } public static Context getCustomAppContext(){ return context; }}
解决方法:
我将回答我自己的问题:看不到解决方案,Parse团队也没有回应.
我现在正在使用SharedPreferences文件来处理本地数据以提供小部件.随着时间的流逝,对Parse Local Datastore的任何使用都会产生光标错误.
希望这有助于从主屏幕小部件和/或服务查询本地sqlite数据库时遇到相同问题的人.
总结以上是内存溢出为你收集整理的如何修复(android.database.CursorWindowAllocationException)崩溃全部内容,希望文章能够帮你解决如何修复(android.database.CursorWindowAllocationException)崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)