如何从图库中获取图像作为文件,并在Android片段中的ImageView中设置它
如何从图库中获取图像作为文件,并在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)
问题的原因是在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中的问题就可以得到解决了。