2015-01-13 3 views
4

커서가 닫힌 후에 오류가 커서에 액세스하려고 시도했습니다. 오류가 어디입니까? 나는 또한 getContentResolver(). query() 대신에 같은 오류가 발생했습니다.android.database.StaleDataException : 커서가 닫힌 후 커서에 액세스하려고 시도했습니다.

내 MainActivity는 Eroor 로그 SherlockFragmentActivity 탭과보기 호출기

private Cursor getInternalAudioCursor(String selection, 
     String[] selectionArgs) { 
    return getActivity().managedQuery(
      MediaStore.Audio.Media.INTERNAL_CONTENT_URI, 
      INTERNAL_COLUMNS, 
      selection, 
      selectionArgs, 
      MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 
} 

private Cursor getExternalAudioCursor(String selection, 
     String[] selectionArgs) { 
    return getActivity().managedQuery(
      MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
      EXTERNAL_COLUMNS, 
      selection, 
      selectionArgs, 
      MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 
} 

Cursor createCursor(String filter) { 
    ArrayList<String> args = new ArrayList<String>(); 
    String selection; 

    if (mShowAll) { 
     selection = "(_DATA LIKE ?)"; 
     args.add("%"); 
    } else { 
     selection = "("; 
     for (String extension : CheapSoundFile.getSupportedExtensions()) { 
      args.add("%." + extension); 
      if (selection.length() > 1) { 
       selection += " OR "; 
      } 
      selection += "(_DATA LIKE ?)"; 
      selection = selection + "AND (IS_MUSIC=1)"; 
     } 
     selection += ")"; 

     selection = "(" + selection + ") AND (_DATA NOT LIKE ?)"; 
     args.add("%espeak-data/scratch%"); 
    } 

    if (filter != null && filter.length() > 0) { 
     filter = "%" + filter + "%"; 
     selection = 
      "(" + selection + " AND " + 
      "((TITLE LIKE ?) OR (ARTIST LIKE ?) OR (ALBUM LIKE ?)))"; 
     args.add(filter); 
     args.add(filter); 
     args.add(filter); 
    } 

    String[] argsArray = args.toArray(new String[args.size()]); 

    getExternalAudioCursor(selection, argsArray); 
    getInternalAudioCursor(selection, argsArray); 

    Cursor c = new MergeCursor(new Cursor[] { 
      getExternalAudioCursor(selection, argsArray), 
      getInternalAudioCursor(selection, argsArray)}); 
    getActivity().startManagingCursor(c); 
    return c; 
} 

입니다 :

01-13 15:02:16.049: E/AndroidRuntime(12435): java.lang.RuntimeException: Unable to resume activity {com.my.ringtone/com.my.ringtone.MainActivity}: android.database.StaleDataException: Attempted to access a cursor after it has been closed. 
01-13 15:02:16.049: E/AndroidRuntime(12435): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2946) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2975) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at android.os.Handler.dispatchMessage(Handler.java:102) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at android.os.Looper.loop(Looper.java:157) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at android.app.ActivityThread.main(ActivityThread.java:5356) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at java.lang.reflect.Method.invokeNative(Native Method) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at java.lang.reflect.Method.invoke(Method.java:515) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
01-13 15:02:16.049: E/AndroidRuntime(12435): at dalvik.system.NativeStart.main(Native Method) 
01-13 15:02:16.049: E/AndroidRuntime(12435): Caused by: android.database.StaleDataException: Attempted to access a cursor after it has been closed. 
01-13 15:02:16.049: E/AndroidRuntime(12435): at android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:64) 
+0

당신의 logcat을 게시하십시오 ... –

+0

사용 후 커서를 닫습니다. –

+0

예 ...하지만 어디서 요? – Higginslpert

답변

0

대신 getActivity().managedQuery();getActivity().getContentResolver().query();을 사용하십시오.

관련 문제