Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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 从库中加载图像无法运行两次_Android_Image_Bitmap_Gallery_Mediastore - Fatal编程技术网

Android 从库中加载图像无法运行两次

Android 从库中加载图像无法运行两次,android,image,bitmap,gallery,mediastore,Android,Image,Bitmap,Gallery,Mediastore,我从图库中选择了一个图像。现在我将它加载到一个临时文件中,并可以在ImageView中显示它。一切正常 Uri uri = data.getData(); File file = new File(uri+""); String fileName = file.getName(); String filePath = file.getParent(); Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getCo

我从图库中选择了一个图像。现在我将它加载到一个临时文件中,并可以在ImageView中显示它。一切正常

Uri uri = data.getData();

File file = new File(uri+"");

String fileName = file.getName();
String filePath = file.getParent();

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);

//here come's the code to save the temp-file and so on
在文件名和文件路径中,我保存了名称和路径供以后使用。因为如果用户想保存图像,我想复制它们

URI shown in the debugger: content:/media/external/images/media/12345
filePath:  content:/media/external/images/media
fileName:  12345
如果我想保存图像,我会使用文件名和文件路径来构建URI,并希望像上面一样。但它不起作用。我从MediaStore获得一个FileNotFoundException无内容提供程序。嗯-在我删除应用程序进行新的测试之前,没有这样的文件或目录,我想我消除了具有读取外部存储权限的无内容提供商例外

Uri uri = Uri.parse(filePath +"/"+ fileName);
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
在这里,我还可以在调试器中看到正确的URI

怎么了

我已经在AndroidManifest中设置了读取外部存储和写入外部存储的权限

在文件名和文件路径中,我保存了名称和路径供以后使用

Uri不是文件,而您的Uri肯定不是文件

怎么了

您的Uri有一个内容方案。这是由ContentProvider提供的。您没有指出这个Uri来自何处,但我猜它来自ACTION\u GET\u文档或类似的东西。在这种情况下,就像需要工作会话的Web URL一样


如果您想长期访问内容,请将其下载到您的应用程序中,就像您从Web URL下载内容一样。

我从图库中获得了一张图片,内容如下:Intent gallerycontent=new intentint.ACTION\u PICK,android.provider.MediaStore.Images.Media.EXTERNAL\u content\u URI;StartActivityForresultGalleryContent、RESULT\u LOAD\u IMG;我想这样做-复制我的应用程序中的图像,但到以后的时间。但我也喜欢得到真正的文件名和图像的真正路径。如何从data.getData或Uri获取此信息?我希望保存此信息以减少在数据库中两次保存同一图像的可能性-我知道,如果图像移动到另一个文件夹,我也会遇到此问题,但这是我以后必须解决的另一个问题。@chrispi:如何从data.getData或Uri中获取此信息?-你没有。没有要求Uri映射到文件,更不用说您可以访问的文件了。如果您想要一个文件,请复制该图像,并立即执行,而不是在以后,因为您不再有权访问它们。我接受了答案,因为这是我问题的答案-我不知道URI是基于会话的,并且包含一些更多信息等。我的稍后复制问题的解决方案是,我先在临时文件中复制图像,然后在我的应用程序中复制。但对于我的问题,以获得正确的路径和名称的文件,我没有一个解决方案,直到现在。也许我不该把照片拿到画廊去。