2011-03-28 133 views
1

在我的應用程序中,有一個表單提交的插入操作。大多數情況下插入操作是成功的。有時插入操作沒有發生,然後,它給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) 

在我的代碼中可能存在什麼問題?

+0

顯然有些文件沒有關閉,但我認爲需要更多的細節才能找到問題。 – trojanfoe 2011-03-28 07:17:47

回答

2

很多時候(如trjanfoe建議),這些問題是因爲遊標仍然是開放的。我發現我可以通過使用try/finally代碼塊來消除大部分問題。

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

這確保了無論發生什麼事情,光標總是被關閉。

+0

我只注意到遊標變量超出了「finally」子句的範圍。所以我糾正了我的答案。我相信你很快就明白了。 – 2012-06-01 18:06:19

相關問題