android - Android,FileNotFound 异常,但被 Glide 发现没有问题。问题是什么?
问题描述
使用 Glide,以下指向 png 文件的 uri 路径可以毫无问题地加载。在 Android 中,以下代码导致“找不到文件异常”。为什么?我需要对 uri 做什么才能使其在 Android 中“无处不在”地工作?
uri = content://com.android.providers.media.documents/document/image%3A11322,由默认文件选择器给出,以编程方式使用。
FileInputStream in = null;
try {
in = new FileInputStream(new File(uri));
} catch (FileNotFoundException e) {
使用 BitMapFactory.decodeFile(uri) 更糟糕,因为它也给出了相同的异常,因为它在 path = content:/com.android... 上找不到文件。重要提示:请注意,无论出于何种原因,BitmapFactory 删除了两个斜杠之一。一个错误?
感谢您提供的任何帮助,可以将这项工作从两天的“寻找并找到”解决方案转换为预期的两分钟工作。我必须说,Android 包含数量惊人的内置陷阱。
解决方案
您不能FileInputStream
在内容方案 uri 上打开一个。
而是在 uri 上打开一个InputStream
。
InputStream is = getContentResolver().openInputStream(uri);
您可以像以前一样使用流。
BitmapFactory.decodeStream(is);
推荐阅读
- c - 打印出具有给定子字符串的链表的所有元素
- c++ - 在 C++ 中更改指针指向的地址
- reinforcement-learning - 决斗 DQN 更新模型架构并导致问题
- ios - 在 SwiftUI 中以固有大小显示分段选取器
- swiftui - 如何在图表中将字符串值设置为 ChartDataEntry.init 的 x?
- java - 仅当哈希集不包含该值时,我如何才能写入文件?
- reactjs - 如何在反应原生中从导航中获取参数值
- google-tag-manager - 为什么 GTM 不执行我的自定义 HTML 标记?
- javascript - 我在 ISO8601 中需要很多日期
- javascript - TypeError: app.address 不是使用 chai-http 的函数