android - “打开的文件太多”错误

标签 android cursor runtimeexception

在我的应用程序中,有一个对表单提交的插入操作。大多数情况下插入操作是成功的。有时插入操作没有发生,然后给出 java.lang.RuntimeException。这是 logcat 的详细信息:

03-28 10:52:09.260: ERROR/IMemory(1501): cannot dup fd=1023, size=1048576, err=0 (Too many open files)
03-28 10:52:09.260: ERROR/IMemory(1501): cannot map BpMemoryHeap (binder=0x5919b0), size=1048576, fd=-1 (Bad file number)
03-28 10:52:09.260: ERROR/JavaBinder(1501): *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
03-28 10:52:09.260: ERROR/JavaBinder(1501): java.lang.RuntimeException: No memory in memObj
03-28 10:52:09.260: ERROR/JavaBinder(1501):     at android.database.CursorWindow.native_init(Native Method)
03-28 10:52:09.260: ERROR/JavaBinder(1501):     at android.database.CursorWindow.<init>(CursorWindow.java:518)
03-28 10:52:09.260: ERROR/JavaBinder(1501):     at android.database.CursorWindow.<init>(CursorWindow.java:27)
03-28 10:52:09.260: ERROR/JavaBinder(1501):     at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:493)
03-28 10:52:09.260: ERROR/JavaBinder(1501):     at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:496)
03-28 10:52:09.260: ERROR/JavaBinder(1501):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:96)
03-28 10:52:09.260: ERROR/JavaBinder(1501):     at android.os.Binder.execTransact(Binder.java:287)
03-28 10:52:09.260: ERROR/JavaBinder(1501):     at dalvik.system.NativeStart.run(Native Method)

我的代码可能有什么问题?

最佳答案

很多时候(正如 trjanfoe 所建议的那样)这类问题是因为游标仍然打开。我发现我可以通过使用 try/finally 代码块来消除大部分问题。

Cursor cursor = null;
try {
    cursor = db.insert(...);
    more code here
}
finally {
    if (cursor != null) {
        cursor.close();
        cursor = null;
    }
}

这确保游标将始终关闭,无论发生什么。

关于android - “打开的文件太多”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5455738/

相关文章:

android - 仅针对文件接收 FileObserver CREATE 或 DELETE

java - Uri 引起的 CursorIndexOutOfBoundsException

android - 具有位图的小部件上的 RuntimeException (Android)

java - Android 时间选择器格式

Android ImageView 最近邻

java - 如何在不知道键/名称字符串的情况下解码 json?

mysql - MySQL 中带游标的存储过程

qt : show mouse position like tooltip

android - 使用自定义可打包类解码 Android 应用程序中的错误

java.lang.RuntimeException : takePicture failed