我正在开发一款Android应用。在我的应用中,我想让用户在用户点击上传按钮时选择多个。所以我使用了this library。我可以成功弹出对话框并选择多个文件。但问题是当我在onActivityResult中将所选图像的URI转换为位图时,它给了我错误。请参阅下面的方案。
这就是我在活动中弹出选择器的方式:
private void getImages() {
Intent intent = new Intent(GalleryActivity.this, ImagePickerActivity.class);
nl.changer.polypicker.Config pickerConfig = new nl.changer.polypicker.Config(R.color.white,R.color.blue,10,R.color.green);
ImagePickerActivity.setConfig(pickerConfig);
startActivityForResult(intent, INTENT_REQUEST_GET_IMAGES);
}
这就是我在结果上转换为位图的方式:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == INTENT_REQUEST_GET_IMAGES) {
Parcelable[] parcelableUris = data.getParcelableArrayExtra(ImagePickerActivity.EXTRA_IMAGE_URIS);
if (parcelableUris == null) {
return;
}
// Java doesn't allow array casting, this is a little hack
Uri[] uris = new Uri[parcelableUris.length];
System.arraycopy(parcelableUris, 0, uris, 0, parcelableUris.length);
if (uris != null) {
bitmaps = new ArrayList<Bitmap>();
for (Uri uri : uris) {
try{
if(uri!=null)
{
Bitmap bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
bitmaps.add(bmp);
}
}
catch (IOException e)
{
Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
if(bitmaps.size()>0)
{
confirmFileUpload();
}
}
}
}
}
正如您在上面的代码中看到的那样,它将到达try-catch语句的异常块。
这是烘烤错误的例子:
这种错误会抛出我选择的任何图像。我的代码出了什么问题,如何解决?
答案 0 :(得分:0)
最后我找到了解决方案。我的问题是当我将uri解析为字符串时,格式是这样的:
/sdcard/download/filename.png
uri字符串必须采用以下格式:
file:///sdcard/download/filename.png
没有Content Provider Found异常抛出,因为我的uri字符串没有必需的前缀。所以我将uri转换为字符串。然后添加前缀。然后我将该字符串解析为URI。然后它成功地运作了。