Picasso Android不加载“content://”类型的Uri

时间:2016-03-09 14:38:35

标签: android picasso

我正在开发处理图片的Android应用程序。

在MainActivity上,您可以选择使用相机或手机中的照片拍照。然后,经过一些处理后,应用程序会显示一个带有一些结果的活动以及Picasso加载的图片: pic.load(uri).resize(1000, 1000).centerCrop().into(normalImage);

在此过程中,我正在保存我的URI并导致SQLite数据库。 这里的一切都很好。

在应用重新启动时,所有内容都已加载,但是从手机中取出的图片。来自相机的照片还可以。

来自相机的图片具有“file://”类型的URI。来自手机的图片具有“content://”类型的URI。

我不知道我可以发布哪个代码部分来帮助你,不要犹豫告诉我!

谢谢你们。

2 个答案:

答案 0 :(得分:2)

  

在此过程中,我正在保存我的URI并导致SQLite数据库。这里的一切都很好。

不是。

对于您收到的任何Uri,您应该假设您只能临时访问其内容。对于content: Uri值,尤其如此。坚持Uri毫无意义,因为您将来可能无法使用该值,尤其是在您的流程终止后。

Uri视为Web资源的URL。某些URL可公开访问,并且可以保留并稍后使用。只要用户登录,其他URL就可以工作,但是一旦用户的会话超时,URL就没用了。 Uri值基本相同。

您的选择是:

  • 在Android 4.4及更高版本中,将ACTION_GET_CONTENT替换为ACTION_OPEN_DOCUMENT,然后使用takePersistableUriPermission()尝试获取对Uri的长期访问权限, the Storage Access Framework

  • 在您的应用中制作内容的本地副本,并对您的UI术语进行适当调整,以便用户了解这是正在发生的事情(例如,“复制”,“附加”,“导入”)

答案 1 :(得分:0)

在开发阶段?如果您使用的是> 6.0版移动设备,那么请添加运行时权限。