试图访问一个光标它已被关闭后 [英] Attempted to access a cursor after it has been closed

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

问题描述

我用下面的code删除图像。它的工作原理是第一次,但是当我试图捕捉图像,并删除它
          我收到了 StaleDataException

  08-07 14:57:24.156:E / AndroidRuntime(789):了java.lang.RuntimeException:无法
       简历活动{com.example.cap_im / com.example.cap_im.MainActivity}:
       android.database.StaleDataException:试图它已被关闭之后访问光标。


 公共无效deleteImageFromGallery(字符串captureimageid){
    乌里U = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;    getContentResolver()。删除(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            BaseColumns._ID +=?,新的String [] {captureimageid});    的String [] =投影{MediaStore.Images.ImageColumns.SIZE,
            MediaStore.Images.ImageColumns.DISPLAY_NAME,
            MediaStore.Images.ImageColumns.DATA,BaseColumns._ID,};    Log.i(信息日志,关于activityresult乌里U+ u.toString());    尝试{
        如果(U!= NULL){
            光标= managedQuery(U,投影,NULL,NULL,NULL);
        }
        如果((光标=空)及!及(cursor.moveToLast())){            INT I = getContentResolver()。删除(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    BaseColumns._ID +=+ cursor.getString(3),空);
            Log.v(TAG,删除列数:+ I);
        }
    } {最后
        如果(指针!= NULL){
            cursor.close();
        }
    }
}


解决方案

功能,managedQuery()是德precated。

请使用getContentResolver()查询()。

的参数是相同的。

I'm using the following code to delete an image. It works the first time, but when I try to capture an image and delete it I get a StaleDataException:

08-07 14:57:24.156: E/AndroidRuntime(789): java.lang.RuntimeException: Unable to               
       resume activity {com.example.cap_im/com.example.cap_im.MainActivity}:  
       android.database.StaleDataException: Attempted to access a cursor after it has been closed.


public void deleteImageFromGallery(String captureimageid) {
    Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

    getContentResolver().delete(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            BaseColumns._ID + "=?", new String[] { captureimageid });

    String[] projection = { MediaStore.Images.ImageColumns.SIZE,
            MediaStore.Images.ImageColumns.DISPLAY_NAME,
            MediaStore.Images.ImageColumns.DATA, BaseColumns._ID, };

    Log.i("InfoLog", "on activityresult Uri u " + u.toString());

    try {
        if (u != null) {
            cursor = managedQuery(u, projection, null, null, null);
        }
        if ((cursor != null) && (cursor.moveToLast())) {

            int i = getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    BaseColumns._ID + "=" + cursor.getString(3),   null);
            Log.v(TAG, "Number of column deleted : " + i);
        }
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

解决方案

Function, managedQuery() is deprecated.

Please use getContentResolver().query().

The parameters is the same.

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

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