onActivityResult 中返回的两个图像路径正在合并为一个,导致 java.io.FileNotFoundException
Two Image paths returned in onActivityResult are getting merged into one resulting in java.io.FileNotFoundException
我正在使用 android-image-picker 库从图库中挑选照片。
代码如下:
tapToUploadLabel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ImagePicker.create(MainActivity.this)
.returnAfterFirst(false) // set whether pick or camera action should return immediate result or not. For pick image only work on single mode
.imageTitle("Tap to select") // image selection title
.single() // single mode
.multi() // multi mode (default mode)
.limit(3) // max images can be selected (99 by default)
.showCamera(true) // show camera or not (true by default)
.imageDirectory("Camera") // directory name for captured image ("Camera" folder by default)
.enableLog(false) // disabling log
.start(REQUEST_CODE_PICKER); // start image picker activity with request code
}
});
这里是onActivtyResult()
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_PICKER && resultCode == RESULT_OK && data != null) {
ArrayList<Image> images = (ArrayList<Image>) ImagePicker.getImages(data);
printImages(images);
mViewPager.setAdapter(mCustomPagerAdapter);
}
}
这是printImages()
:
private void printImages(List<Image> images) {
if (images == null) return;
if (imageArray.size() >= 1) {
imageArray.clear();
}
StringBuilder stringBuffer = new StringBuilder();
for (int i = 0, l = images.size(); i < l; i++) {
stringBuffer.append(images.get(i).getPath()).append("\n");
imageArray.add(Uri.parse(stringBuffer.toString().trim()));
}
}
现在,我正在使用 imageArray
在 ImageView
中设置图像,如下所示:
ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
Log.d("imageArrayContains", imageArray.get(position).toString());
imageView.setImageURI(imageArray.get(position));
问题是,当我只选择 1 张图片时,它在 ImageView 中设置时没有任何错误,但是当我选择 2 张或更多图片时,我收到此错误:
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Pictures/Kwote/1506843168441.jpg
/storage/emulated/0/Pictures/Camera/IMG_20171001_035028145702152.jpg: open failed: ENOENT (No such file or directory)
因为 2 个文件路径正在合并为一个,如下所示:/storage/emulated/0/Pictures/Kwote/1506843168441.jpg
/storage/emulated/0/Pictures/Camera/IMG_20171001_035028145702152.jpg
我不知道如何阻止它合并,以便我可以将所有选定的图像加载到我的 ImageView 中。
请帮忙解决这个问题。
您在同一个 StringBuilder 中附加了两个路径。
将它放在 for 循环中。
我相信您根本不需要 StringBuilder。只需使用 imageArray.add(Uri.parse
(images.get(i).getPath().trim()));
我正在使用 android-image-picker 库从图库中挑选照片。
代码如下:
tapToUploadLabel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ImagePicker.create(MainActivity.this)
.returnAfterFirst(false) // set whether pick or camera action should return immediate result or not. For pick image only work on single mode
.imageTitle("Tap to select") // image selection title
.single() // single mode
.multi() // multi mode (default mode)
.limit(3) // max images can be selected (99 by default)
.showCamera(true) // show camera or not (true by default)
.imageDirectory("Camera") // directory name for captured image ("Camera" folder by default)
.enableLog(false) // disabling log
.start(REQUEST_CODE_PICKER); // start image picker activity with request code
}
});
这里是onActivtyResult()
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_PICKER && resultCode == RESULT_OK && data != null) {
ArrayList<Image> images = (ArrayList<Image>) ImagePicker.getImages(data);
printImages(images);
mViewPager.setAdapter(mCustomPagerAdapter);
}
}
这是printImages()
:
private void printImages(List<Image> images) {
if (images == null) return;
if (imageArray.size() >= 1) {
imageArray.clear();
}
StringBuilder stringBuffer = new StringBuilder();
for (int i = 0, l = images.size(); i < l; i++) {
stringBuffer.append(images.get(i).getPath()).append("\n");
imageArray.add(Uri.parse(stringBuffer.toString().trim()));
}
}
现在,我正在使用 imageArray
在 ImageView
中设置图像,如下所示:
ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
Log.d("imageArrayContains", imageArray.get(position).toString());
imageView.setImageURI(imageArray.get(position));
问题是,当我只选择 1 张图片时,它在 ImageView 中设置时没有任何错误,但是当我选择 2 张或更多图片时,我收到此错误:
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Pictures/Kwote/1506843168441.jpg
/storage/emulated/0/Pictures/Camera/IMG_20171001_035028145702152.jpg: open failed: ENOENT (No such file or directory)
因为 2 个文件路径正在合并为一个,如下所示:/storage/emulated/0/Pictures/Kwote/1506843168441.jpg
/storage/emulated/0/Pictures/Camera/IMG_20171001_035028145702152.jpg
我不知道如何阻止它合并,以便我可以将所有选定的图像加载到我的 ImageView 中。
请帮忙解决这个问题。
您在同一个 StringBuilder 中附加了两个路径。
将它放在 for 循环中。
我相信您根本不需要 StringBuilder。只需使用 imageArray.add(Uri.parse
(images.get(i).getPath().trim()));