无法在Android中使用Poly Picker多个图像选择器库

时间:2016-06-12 11:09:06

标签: android bitmap uri android-file

我正在开发一款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语句的异常块。

这是烘烤错误的例子:

enter image description here

这种错误会抛出我选择的任何图像。我的代码出了什么问题,如何解决?

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。我的问题是当我将uri解析为字符串时,格式是这样的:

   /sdcard/download/filename.png

uri字符串必须采用以下格式:

   file:///sdcard/download/filename.png

没有Content Provider Found异常抛出,因为我的uri字符串没有必需的前缀。所以我将uri转换为字符串。然后添加前缀。然后我将该字符串解析为URI。然后它成功地运作了。