android.database.StaleDataException:试图访问一个游标已关闭后 [英] android.database.StaleDataException: Attempted to access a cursor after it has been closed

查看:181
本文介绍了android.database.StaleDataException:试图访问一个游标已关闭后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是片段活动迫使它关闭时,我preSS home键,错误是尝试它已经关闭后访问光标。哪里是错误。我也尝试getContentResolver()查询(),而不是managedQuery()同样的错误。

和我MainActivity是SherlockFragmentActivity标签和查看传呼机

 私人光标getInternalAudioCursor(字符串选择,
        的String [] selectionArgs两个){
    返回getActivity()。managedQuery(
            MediaStore.Audio.Media.INTERNAL_CONTENT_URI,
            INTERNAL_COLUMNS,
            选择,
            selectionArgs两个,
            MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
}私人光标getExternalAudioCursor(字符串选择,
        的String [] selectionArgs两个){
    返回getActivity()。managedQuery(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            EXTERNAL_COLUMNS,
            选择,
            selectionArgs两个,
            MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
}光标createCursor(字符串过滤器){
    ArrayList的<串GT; ARGS =新的ArrayList<串GT;();
    串选择;    如果(mShowAll){
        选择=(_DATA样?);
        args.add(%);
    }其他{
        选择=(;
        对于(字符串扩展:CheapSoundFile.getSupportedExtensions()){
            args.add(%+扩展名);
            如果(selection.length()→1){
                选择+ =或;
            }
            选择+ =(_DATA样?);
            选择=选择+AND(IS_MUSIC = 1);
        }
        选择+ =);        选择=(+选择+)AND(_DATA NOT LIKE?);
        args.add(%espeak的数据/划伤%);
    }    如果(过滤= NULL&放大器;!&安培; filter.length()0){
        过滤=%+过滤+%;
        选择=
            (+选择+和+
            ((TITLE等)或(艺术家等)或(ALBUM等)???));
        args.add(过滤器);
        args.add(过滤器);
        args.add(过滤器);
    }    的String [] = argsArray args.toArray(新的String [args.size()]);    getExternalAudioCursor(选择,argsArray);
    getInternalAudioCursor(选择,argsArray);    光标C =新MergeCursor(新光标[] {
            getExternalAudioCursor(选择,argsArray)
            getInternalAudioCursor(选择,argsArray)});
    。getActivity()startManagingCursor(C);
    返回℃;
}

Eroor日志:

  15 01-13:02:16.049:E / AndroidRuntime(12435):了java.lang.RuntimeException:无法恢复活动{com.my.ringtone / com.my.ringtone .MainActivity}:android.database.StaleDataException:尝试它已被关闭之后访问光标。
01-13 15:02:16.049:E / AndroidRuntime(12435):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2946)
01-13 15:02:16.049:E / AndroidRuntime(12435):在android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2975)
01-13 15:02:16.049:E / AndroidRuntime(12435):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1307)
01-13 15:02:16.049:E / AndroidRuntime(12435):在android.os.Handler.dispatchMessage(Handler.java:102)
01-13 15:02:16.049:E / AndroidRuntime(12435):在android.os.Looper.loop(Looper.java:157)
01-13 15:02:16.049:E / AndroidRuntime(12435):在android.app.ActivityThread.main(ActivityThread.java:5356)
01-13 15:02:16.049:E / AndroidRuntime(12435):在java.lang.reflect.Method.invokeNative(本机方法)
01-13 15:02:16.049:E / AndroidRuntime(12435):在java.lang.reflect.Method.invoke(Method.java:515)
01-13 15:02:16.049:E / AndroidRuntime(12435):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265)
01-13 15:02:16.049:E / AndroidRuntime(12435):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
01-13 15:02:16.049:E / AndroidRuntime(12435):在dalvik.system.NativeStart.main(本机方法)
01-13 15:02:16.049:E / AndroidRuntime(12435):android.database.StaleDataException:尝试它已被关闭后访问光标所致。
01-13 15:02:16.049:E / AndroidRuntime(12435):在android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:64)


解决方案

功能 managedQuery()是德precated。

请使用 getContentResolver()查询(参数..)代替。

该参数将相同。
这将解决这个问题。

This is fragment activity it force closed when i press home button, error is Attempted to access a cursor after it has been closed. Where is error. i also try getContentResolver().query() instead of managedQuery() same error.

and my MainActivity is SherlockFragmentActivity tabs and view pager

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;
}

Eroor log:

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)

解决方案

Function managedQuery() is deprecated.

Please use getContentResolver().query(parameters .. ) instead.

The parameters will be same. This will solve the problem.

这篇关于android.database.StaleDataException:试图访问一个游标已关闭后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆