gpt4 book ai didi

java - FileProvider.getUriForFile 正在抛出 StringIndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-04 17:41:17 25 4
gpt4 key购买 nike

首先要提的是,问题的答案here不帮忙。

源代码如下所示:

Intent intent    = new Intent("com.mycompany.action.PICK_FILE");
String authority = "com.mycompany.fileprovider";
File file = Environment.getExternalStorageDirectory();

intent.setData(FileProvider.getUriForFile(this, authority, file));
FileProvider.getUriForFile正在抛出异常,这是堆栈跟踪:
java.lang.StringIndexOutOfBoundsException: length=15; index=16
at java.lang.String.indexAndLength(String.java:500)
at java.lang.String.substring(String.java:1313)
at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:687)
at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:377)

AndroidManifest.xml application 内部标签我添加了以下内容:
        <provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.mycompany.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
>
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
/>
</provider>
file_paths.xml的内容如下:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="input_files" path="." />
<external-path name="output_files" path="MyAppName/" />
</paths>
output_files在此上下文中不使用路径。

我已经通过 FileProvider.SimplePathStrategy.getUriForFile() 运行调试器.相关代码 fragment 如下(第 683-688 行):
            final String rootPath = mostSpecific.getValue().getPath();
if (rootPath.endsWith("/")) {
path = path.substring(rootPath.length());
} else {
path = path.substring(rootPath.length() + 1);
}
rootPath被评估为 /storage/sdcard这也是 path 的确切值,所以抛出异常也就不足为奇了。

我究竟做错了什么?

更新:

正如下面的建议,通过 java.io.File不应该是目录。 Docs是模棱两可的,从不明确地说出来。解决方法是“手动”创建 uri。因此
intent.setData(FileProvider.getUriForFile(this, authority, file));

应替换为:
intent.setData(Uri.parse("content://" + file.getAbsolutePath()));

最佳答案

getUriForFile 的第三个参数应该是带有文件名的文件的路径。 Here is an docs, read it .

关于java - FileProvider.getUriForFile 正在抛出 StringIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54385933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com