【问题标题】:java.lang.IllegalArgumentException: column'_data' does not existjava.lang.IllegalArgumentException:列'_data'不存在
【发布时间】:2013-09-22 20:16:33
【问题描述】:
public static String getFilePathFromUri(Uri uri, Context c) {
    try {
        String filePath = null;
        String scheme = uri.getScheme();
        if (scheme != null && scheme.equals("content")) {
            ContentResolver contentResolver = c.getContentResolver();
            Cursor cursor = contentResolver.query(uri, null, null, null,
                    null);
            cursor.moveToFirst();
            filePath = cursor.getString(cursor
                    .getColumnIndexOrThrow(Images.Media.DATA));
        }
        return filePath;
    } catch (Exception e) {
        //java.lang.illegalArgumentException: column'_data' does not exist
        return null;
    }
}

当图像来自 Picasa 文件夹时,我会收到此异常。

【问题讨论】:

    标签: android


    【解决方案1】:
    // try this way,hope this will help you...
    
    public String getAbsolutePath(Uri uri) {
            if(Build.VERSION.SDK_INT >= 19){
                String id = uri.getLastPathSegment().split(":")[1];
                final String[] imageColumns = {MediaStore.Images.Media.DATA };
                final String imageOrderBy = null;
                Uri tempUri = getUri();
                Cursor imageCursor = getContentResolver().query(tempUri, imageColumns,
                        MediaStore.Images.Media._ID + "="+id, null, imageOrderBy);
                if (imageCursor.moveToFirst()) {
                    return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
                }else{
                    return null;
                }
            }else{
                String[] projection = { MediaColumns.DATA };
    
                Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
                if (cursor != null) {
                    int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
                    cursor.moveToFirst();
                    return cursor.getString(column_index);
                } else
                    return null;
            }
    
    }
    

    【讨论】:

    • 它使用已弃用的代码。另外我的代码有什么问题,它不仅适用于API 4.3
    • MediaStore.MediaColumns.DATA.equals(MediaStore.Images.Media.DATA) == true。那么这有什么帮助呢?
    • 什么是getUri()?请解释这一行 Uri tempUri = getUri();
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2016-06-30
    • 2014-02-24
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多