Java FileNotFoundException用于从SD卡获取图像
我正在尝试获取SD卡中的所有图像并填充到gridview、、、中 这是我的代码,用于从SD卡获取图像Java FileNotFoundException用于从SD卡获取图像,java,android,gridview,Java,Android,Gridview,我正在尝试获取SD卡中的所有图像并填充到gridview、、、中 这是我的代码,用于从SD卡获取图像 private ArrayList<CustomGallery> getGalleryPhotos() { ArrayList<CustomGallery> galleryList = new ArrayList<CustomGallery>(); try { final String[] column
private ArrayList<CustomGallery> getGalleryPhotos() {
ArrayList<CustomGallery> galleryList = new ArrayList<CustomGallery>();
try {
final String[] columns = { MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
@SuppressWarnings("deprecation")
Cursor imagecursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns,
null, null, orderBy);
if (imagecursor != null && imagecursor.getCount() > 0) {
while (imagecursor.moveToNext()) {
CustomGallery item = new CustomGallery();
int dataColumnIndex = imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
item.sdcardPath = imagecursor.getString(dataColumnIndex);
galleryList.add(item);
}
}
}catch (Exception e) {
e.printStackTrace();
}
// show newest photo at beginning of the list
Collections.reverse(galleryList);
return galleryList;
}
private ArrayList getGalleryPhotos(){
ArrayList galleryList=新的ArrayList();
试一试{
最终字符串[]列={MediaStore.Images.Media.DATA,
MediaStore.Images.Media.\u ID};
最终字符串orderBy=MediaStore.Images.Media.\u ID;
@抑制警告(“弃用”)
游标imagecursor=managedQuery(
MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,列,
null,null,orderBy);
if(imagecursor!=null&&imagecursor.getCount()>0){
while(imagecursor.moveToNext()){
CustomGallery项=新建CustomGallery();
int dataColumnIndex=imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
item.sdcardPath=imagecursor.getString(dataColumnIndex);
厨房列表。添加(项目);
}
}
}捕获(例外e){
e、 printStackTrace();
}
//在列表开头显示最新照片
收藏。反面(画廊列表);
返回galleryList;
}
上面的代码为某些图像返回FileNotFoundException,但在gridview中填充可用图像
前五个网格没有图像,而选择这些图像会在其他活动中显示空白区域
引发的异常是
03-11 11:00:40.540: E/ImageLoader(4145): /mnt/storage/Kushalam/_profileImage/CroppedImage.jpg (No such file or directory)
03-11 11:00:40.540: E/ImageLoader(4145): java.io.FileNotFoundException: /mnt/storage/Kushalam/_profileImage/CroppedImage.jpg (No such file or directory)
03-11 11:00:40.540: E/ImageLoader(4145): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
03-11 11:00:40.540: E/ImageLoader(4145): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
03-11 11:00:40.540: E/ImageLoader(4145): at java.io.FileInputStream.<init>(FileInputStream.java:80)
03-11 11:00:40.540: E/ImageLoader(4145): at org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:82)
03-11 11:00:40.540: E/ImageLoader(4145): at org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:180)
03-11 11:00:40.540: E/ImageLoader(4145): at java.net.URL.openStream(URL.java:645)
03-11 11:00:40.540: E/ImageLoader(4145): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromFile(BaseImageDownloader.java:121)
03-11 11:00:40.540: E/ImageLoader(4145): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:82)
03-11 11:00:40.540: E/ImageLoader(4145): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.saveImageOnDisc(LoadAndDisplayImageTask.java:340)
03-11 11:00:40.540: E/ImageLoader(4145): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:232)
03-11 11:00:40.540:E/ImageLoader(4145):/mnt/storage/Kushalam/_profileImage/cropedimage.jpg(没有这样的文件或目录)
03-11:00:40.540:E/ImageLoader(4145):java.io.FileNotFoundException:/mnt/storage/Kushalam/_profileImage/cropedimage.jpg(没有这样的文件或目录)
03-11:00:40.540:E/ImageLoader(4145):位于org.apache.harmony.luni.platform.OSFileSystem.open(本机方法)
03-11:00:40.540:E/ImageLoader(4145):位于dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
03-11:00:40.540:E/ImageLoader(4145):位于java.io.FileInputStream。(FileInputStream.java:80)
03-11:00:40.540:E/ImageLoader(4145):位于org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:82)
03-11:00:40.540:E/ImageLoader(4145):位于org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:180)
03-11:00:40.540:E/ImageLoader(4145):位于java.net.URL.openStream(URL.java:645)
03-11:00:40.540:E/ImageLoader(4145):位于com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromFile(BaseImageDownloader.java:121)
03-11:00:40.540:E/ImageLoader(4145):位于com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:82)
03-11:00:40.540:E/ImageLoader(4145):位于com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.saveImageOnDisc(LoadAndDisplayImageTask.java:340)
03-11:00:40.540:E/ImageLoader(4145):位于com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:232)
我认为mediastore返回了错误的路径。尝试检查路径中的真实文件
CustomGallery item = new CustomGallery();
int dataColumnIndex = imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
item.sdcardPath = imagecursor.getString(dataColumnIndex);
File temp = new File( item.sdcardPath );
if( temp.exists() )
galleryList.add(item);
像这样。检查真实文件是否位于/mnt/storage/Kushalam/\u profileImage/crappedimage.jpgno这样的文件夹是there@user39996我不太清楚。我认为这个问题是真实数据被删除了,但mediastore没有更改,或者在其他列中检查“已删除”,如Contacts.Group。我发现的问题是我一直在使用universal image loader,它还获取磁盘上的缓存映像,所以,即使删除的图像存在于缓存中,它也会被考虑在内,您展示了如何避免这种情况,,,无论如何,谢谢@Amadas