【问题标题】:android error when select one image not multiple选择一个图像而不是多个图像时的android错误
【发布时间】:2016-11-07 19:23:47
【问题描述】:

我正在尝试从我的图库中获取图像并将它们上传到服务器。我想允许用户从图库中选择多个图像。当我选择两个或更多图像时,效果非常好。但是当我只选择一个图像时,它会忽略它并且什么都不返回。这是我的代码,当没有剪辑数据为空时,我正在打印消息

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {


        if (requestCode == 10 && resultCode == Activity.RESULT_OK) {

            if(data!=null)
            {
                ClipData clipData = data.getClipData();

                if (clipData != null) {
                    bitmaps_group=new Bitmap[clipData.getItemCount()];
                    for (int i = 0; i < clipData.getItemCount(); i++) {

                        ClipData.Item item = clipData.getItemAt(i);
                        Uri uri = item.getUri();

                        try {
                            bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
                            bitmaps_group[i]=MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);

                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        if(i==4)
                            i=clipData.getItemCount()+1;
                    }
                    new Encode_image().execute();
                }
                else
                    Toast.makeText(getActivity(),"error",Toast.LENGTH_SHORT).show();
            }


        }

}

在这里我调用打开画廊:

imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        System.out.println("r1 clikcid");

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select Picture"), 10);
    }
});

【问题讨论】:

  • Toast.makeText(getActivity(),"error",Toast.LENGTH_SHORT).show(); 更好:Toast.makeText(getActivity(),data,getData().toString(), Toast.LENGTH_SHORT).show();

标签: java android android-intent android-gallery


【解决方案1】:

如果只选择了一张图片,它将不在ClipData 中,就像选择更多图片的情况一样。

data.getData() 将是所选的Uri

【讨论】:

  • 那么我如何检查这两种情况?
  • 首先检查它们。之后,您将找到流程。你现在有"error" toast 吗?
  • 做你想做的。它是你的应用程序。
【解决方案2】:

问题是基于您定位的 API 版本,请尝试在调用意图之前检查构建版本,以便从:

 Intent intent = new Intent();
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent,"Select Picture"), 10);

改成

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    try {
 Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select Picture"), 10);
 }catch(Exception e){
                        Intent photoPickerIntent = new Intent(this, XYZ.class);
                        startActivityForResult(photoPickerIntent, SELECT_IMAGE_REQUEST);
                    }
                }
    else{
      Intent photoPickerIntent = new Intent(this, XYZ.class);
                        startActivityForResult(photoPickerIntent, SELECT_IMAGE_REQUEST);
    }

希望对您有所帮助。

【讨论】:

  • 你所说的 XYZ 类是什么意思?以及为什么 API 版本在用于多图像选择时会出现问题
  • 我使用 XYZ 来捕获异常。
【解决方案3】:
if (requestCode == UPLOAD_GALLERY_REQ_CODE && resultCode == RESULT_OK && null != data) {
        if(data.getClipData()!=null){
         int count = data.getClipData().getItemCount();
         for(int i=0; i<count; i++){

             //here you can get your multiple images uri's
             // for example, i want array of selected images uri's so : 

             array.add(data.getClipData().getItemAt(i).getUri());

         }
        }else {
         // and here you get the URI of single image (single selected)
            galleryUri.add(data.getData());
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2014-07-01
    • 2020-11-13
    • 2012-10-17
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多