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

Cannot use Poly Picker multiple image picker library in Android

我正在开发 Android 应用程序。在我的应用程序中,我想让用户在点击上传按钮时选择多个。所以我用了this library。我可以成功弹出对话框并选择多个文件。但问题是当我将 selected 图像的 URI 转换为 onActivityResult 中的位图时,它给我错误。

这就是我在 activity 中弹出选择器的方式:

 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 语句的 io 异常块。

这是toasted错误的例子:

那种错误会抛出我 select 的任何图像。我的代码有什么问题,我该如何解决?

我终于找到了解决办法。我的问题是当我将 uri 解析为字符串时,格式是这样的:

   /sdcard/download/filename.png

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

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

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