Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓数据&x27;getContentResolver上不存在_Android_Android Contentresolver - Fatal编程技术网

Android 安卓数据&x27;getContentResolver上不存在

Android 安卓数据&x27;getContentResolver上不存在,android,android-contentresolver,Android,Android Contentresolver,getColumnIndexOrThrow引发异常的原因可能是什么 java.lang.IllegalArgumentException:列“\u data”不存在。可用列:[] 但是,如果您重命名该文件并再次重试,它会工作吗 private static String getDataColumn(Context context, Uri uri, String selection, String[] selectio

getColumnIndexOrThrow引发异常的原因可能是什么

java.lang.IllegalArgumentException:列“\u data”不存在。可用列:[]

但是,如果您重命名该文件并再次重试,它会工作吗

private static String getDataColumn(Context context, Uri uri, String selection,
                                       String[] selectionArgs) {
        Cursor cursor = null;
        final String[] projection = {
                MediaStore.Files.FileColumns.DATA
        };
        try {
            cursor = context.getContentResolver().query(
                    uri, projection, selection, selectionArgs, null);
            if (cursor != null && cursor.moveToFirst()) {
                final int cindex = cursor.getColumnIndexOrThrow(projection[0]);
                return cursor.getString(cindex);
            }
        }
             catch (Exception e) {
                e.printStackTrace();
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return null;
    }
原始文件的目的是

content://com.sec.android.app.myfiles.FileProvider/device_storage/Download/myfile.pdf

然而,重命名后的文件以


内容://0@media/外部/file/588

MediaStore.Files.FileColumns.DATA
已被弃用,并且
列'\u DATA'
不再存在

如上所述

此常量在API级别29中被弃用。

应用程序可能没有直接访问此路径的文件系统权限。 而不是尝试 若要直接打开此路径,应用程序应使用 ContentResolver#openFileDescriptor(Uri,字符串)以获得访问权限

如何使用openFileDescriptor? 我尝试在应用程序中提供两个不同的广泛使用的文件的示例

图像文件 关于如何处理
位图

非图像文件 关于如何处理
FileInputStream
FileOutputStream

结论 试图获得
绝对路径
是没有意义的,尽管这是没有必要的,除非提出安全和隐私问题。事实上,
相对路径
足以处理文件,在
内核模式
用户模式
之间有
抽象表示实现
,可以将
相对路径
映射到
绝对路径
,用户不需要知道


openFileDescriptor
速度非常快,与所有android版本兼容

MediaStore.Files.FileColumns.DATA
已被弃用,并且不再存在
column'\u DATA'

如上所述

此常量在API级别29中被弃用。

应用程序可能没有直接访问此路径的文件系统权限。 而不是尝试 若要直接打开此路径,应用程序应使用 ContentResolver#openFileDescriptor(Uri,字符串)以获得访问权限

如何使用openFileDescriptor? 我尝试在应用程序中提供两个不同的广泛使用的文件的示例

图像文件 关于如何处理
位图

非图像文件 关于如何处理
FileInputStream
FileOutputStream

结论 试图获得
绝对路径
是没有意义的,尽管这是没有必要的,除非提出安全和隐私问题。事实上,
相对路径
足以处理文件,在
内核模式
用户模式
之间有
抽象表示实现
,可以将
相对路径
映射到
绝对路径
,用户不需要知道


openFileDescriptor
速度非常快,并且与所有android版本兼容

,因此如果我在原始文件上使用uri.getPath(),路径返回(无效)为
/device\u storage/Download/myFile.pdf
,这是我的文件打开例程的无效路径,但是,如果我重命名它并重试,它会返回:
/storage/emulated/0/Download/myFile.pdf
,这会很好地打开文件吗?想法?任何人都知道为什么MyFiles应用程序会出现此问题,但是其他浏览器应用程序会发送正确的getData()?请解释您实际上在尝试做什么?你之前所做的和之后所期待的。当抛出这个异常时,我有一个活动来处理文件的打开,并在清单中注册该类型,以便我可以用来打开该类型的文件。在一种情况下,getData()返回一个未解析为有效文件路径的字符串,如上文所示。但是,如果我在External file exporer中重命名文件并重试,返回的getData字符串是有效的。我会在答案中添加额外的材料。因此,如果我只是在原始文件上使用uri.getPath(),路径返回(无效)为
/device\u storage/Download/myFile.pdf
,这是我的文件打开例程的无效路径,但是,如果我重命名它并重试,它会返回:
/storage/emulated/0/Download/myFile.pdf
,这会很好地打开文件吗?想法?任何人都知道为什么MyFiles应用程序会出现此问题,但是其他浏览器应用程序会发送正确的getData()?请解释您实际上在尝试做什么?你之前所做的和之后所期待的。当抛出这个异常时,我有一个活动来处理文件的打开,并在清单中注册该类型,以便我可以用来打开该类型的文件。在一种情况下,getData()返回一个未解析为有效文件路径的字符串,如上文所示。但是,如果我在External file exporer中重命名该文件并重试,则返回的getData字符串是有效的。我会在答案中添加额外的材料。使用intent.getData().getPath这样做是否正确?如果是这样,MyFiles发送的数据仍然中断,但是其他文件浏览器应用程序发送了正确的信息?这是一个运行Android 10的Note10 Plus,谢谢你的解释。我的问题是,我必须向正在调用的库传递一个绝对路径字符串,而不是描述符或流。使用intent.getData().getPath是否正确?如果是这样,MyFiles发送的数据仍然中断,但是其他文件浏览器应用程序发送了正确的信息?这是一个运行Android 10的Note10 Plus,谢谢你的解释。我的问题是,我必须将绝对路径字符串传递给我正在调用的库,而不是描述符或流。
if(uri==null)return;
ContentResolver contentResolver = getActivity().getContentResolver();
if(contentResolver==null)return;
ParcelFileDescriptor parcelFileDescriptor = contentResolver.openFileDescriptor(uri,"rw");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
if(fileDescriptor==null)return;
Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
if(uri==null)return;
ContentResolver contentResolver = getActivity().getContentResolver();
if(contentResolver==null)return;
ParcelFileDescriptor parcelFileDescriptor = contentResolver.openFileDescriptor(uri,"rw");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
if(fileDescriptor==null)return;
FileInputStream fileInputStream = new FileInputStream(fileDescriptor);
FileOutputStream fileOutputStream = new FileOutputStream(fileDescriptor);
parcelFileDescriptor.close();