多个图像上传代码不起作用。我想念什么?

时间:2019-05-08 15:00:35

标签: java android

我正在开发一个Android应用,要求用户从手机图库中上传2张图片。

我的活动有一个“上传”按钮+ 2个ImageView,可在继续下一个活动之前显示选定的图像。

一切似乎都可以正常工作,但是两个ImageView都只填充了我选择的图像之一,我不知道为什么。

我在Google和该网站上进行了搜索,发现了很多类似的问题,但没有一个对我有帮助。由于我不是专家,所以我可能会错过一些愚蠢而简单的事情,但是此时我迷失了方向,因此决定创建一个帖子。

这是我从活动中获得的Java代码:

public class UploadActivity extends AppCompatActivity {

    //Button and ImageViews have the same names for layout IDs
    Button uploadBtn;
    ImageView imgOne;
    ImageView imgTwo;

    public static final int PICK_IMAGE = 100;

    public static Uri imgUri1;
    public static Uri imgUri2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload);

        uploadBtn = (Button)findViewById(R.id.uploadBtn);

        imgOne = (ImageView)findViewById(R.id.imgOne);
        imgTwo = (ImageView)findViewById(R.id.imgTwo);

        uploadBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openGallery();
            }
        });
    }

    private void openGallery() {
        Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
        gallery.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        startActivityForResult(gallery, PICK_IMAGE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(resultCode == RESULT_OK && requestCode == PICK_IMAGE) {
            imgUri1 = data.getData();
            imgOne.setImageURI(imgUri1);
            imgUri2 = data.getData();
            imgTwo.setImageURI(imgUri2);
        }
    }
}

此代码有效,但仅显示两个ImageView的一个选定图像。

好像跳过第二张图像,并将其ImageView分配给第一张图像。

3 个答案:

答案 0 :(得分:0)

您的问题是这段代码:

imgUri1 = data.getData();
imgOne.setImageURI(imgUri1);
imgUri2 = data.getData();
imgTwo.setImageURI(imgUri2);

您将imgUri1 AND imgUri2设置为data.getData()。因此imgUri1imgUri2完全相同。因此,您要为两个Uri设置相同的imageViews

答案 1 :(得分:0)

也许应该将数据设置为数组data[0]=data1fromimg1data[1]=data2fromimg1

在您的代码中

<br>
imgUri1 = data[0].getData();<br>
imgOne.setImageURI(imgUri1);<br>
imgUri2 = data[1].getData();<br>
imgTwo.setImageURI(imgUri2);

确保接收数据

答案 2 :(得分:0)

经过多次尝试,自己解决了。 解决方案是使用for这样的:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == PICK_IMAGE && resultCode == RESULT_OK && data.getClipData() != null) {
            int count = data.getClipData().getItemCount();
            for(int i = 0; i < count; i++) {
                Uri screen = data.getClipData().getItemAt(i).getUri();
                imgUri1 = data.getClipData().getItemAt(0).getUri();
                imgOne.setImageURI(imgUri1);
                imgUri2 = data.getClipData().getItemAt(1).getUri();
                imgTwo.setImageURI(imgUri2);
            }
        }
    }