无法在 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。然后就成功了。
我正在开发 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。然后就成功了。