2011-03-28 4 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

답변

2

매우 자주 (trjanfoe 제안) 이러한 종류의 문제는 커서가 아직 열려 있기 때문에 발생합니다. 나는 try/finally 코드 블럭을 사용하여 대부분의 문제를 제거 할 수 있다는 것을 발견했다.

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

이렇게하면 아무 래도 커서가 닫히게됩니다.

+0

커서 변수가 "finally"절의 범위를 벗어났습니다. 그래서 나는 대답을 수정했다. 꽤 빨리 알아 냈을거야. –

관련 문제