如何从图库中获取图像作为文件,并在Android片段中的ImageView中设置它

13 浏览
0 Comments

如何从图库中获取图像作为文件,并在Android片段中的ImageView中设置它

我想从相册中选择一张图片,并在片段中的ImageView上设置它。我还想将图片作为文件上传到我的API后端,因此它需要以允许上传文件的格式。在Postman中,它的样子是这样的。

[图片描述](https://i.stack.imgur.com/ewIiJ.png)

addCover_btn按钮允许我打开相册并选择图片,但是当我选择图片后,应用程序会崩溃。

FragmentWriting.java

public class FragmentWriting extends Fragment implements Serializable, AdapterView.OnItemSelectedListener {
    ImageView imageView;
    Uri imageUri;
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.fragment_writing, container, false);
        addCover_btn = rootView.findViewById(R.id.addCoverButton);
        addCover_btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                openGallery();
            }
        });
        return rootView;
    }
    // 从相册获取图片尝试2.0
    private void openGallery() {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
        startActivityForResult(photoPickerIntent, 100);
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == 100){
            imageUri = data.getData();
            imageView.setImageURI(imageUri);
        }
    }
}

[这是日志的截图](https://i.stack.imgur.com/HbuQP.png)

0
0 Comments

问题的原因是在Fragment中获取图库中的图片并将其设置到ImageView中时,方法的实现方式与在Activity中不同。解决方法是参考stackoverflow上一个帖子的第一个答案。

以下是解决方法的具体步骤:

1. 首先,在Fragment的布局文件中添加一个ImageView组件,用于显示选中的图片。


2. 在Fragment的Java文件中,声明ImageView的变量并在onCreateView方法中进行初始化。

private ImageView imageView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_layout, container, false);
    imageView = view.findViewById(R.id.imageView);
    return view;
}

3. 在Fragment中添加获取图库图片的方法,并在onActivityResult方法中调用该方法。

private void getImageFromGallery() {
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, GALLERY_REQUEST_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == GALLERY_REQUEST_CODE && resultCode == RESULT_OK && data != null) {
        Uri imageUri = data.getData();
        setImageToImageView(imageUri);
    }
}

4. 最后,在Fragment中添加将选中的图片设置到ImageView的方法。

private void setImageToImageView(Uri imageUri) {
    try {
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), imageUri);
        imageView.setImageBitmap(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

通过以上步骤,在Fragment中获取图库中的图片并将其设置到ImageView中的问题就可以得到解决了。

0