Android Studio中getBitmap方法失效返回Null问题(Java)
问题分析与解决方案
首先直接点破核心问题:你遇到的所有现象(代码绕过try/catch、图片不显示、TextView没隐藏、按钮不出现)根源就是requestCode不匹配——你的onActivityResult方法里只写了针对requestCode == PICTURE_RESULT(值为1)的逻辑,但日志明确显示返回的requestCode是GALLERY_RESULT(值为2),这部分分支完全没被触发,所以相关的赋值、UI更新代码根本没执行。
关于selectedImage的赋值情况
答案是:没有被正确赋值。因为你给selectedImage赋值的代码(不管是Uri还是Bitmap)都在只处理PICTURE_RESULT的代码块里,而当前触发的是图库选择的请求(requestCode=2),这部分代码根本没跑,所以selectedImage还是初始值(大概率是null)。
修复方案
1. 先修正onActivityResult的requestCode判断
把图库请求的GALLERY_RESULT也加入判断逻辑,确保两种请求的处理都能触发:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 先判断结果是否成功 if (resultCode == RESULT_OK) { // 同时处理拍照(PICTURE_RESULT)和图库选择(GALLERY_RESULT) if (requestCode == PICTURE_RESULT || requestCode == GALLERY_RESULT) { try { if (data != null && data.getData() != null) { Uri selectedImageUri = data.getData(); // 原逻辑的Bitmap加载 Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImageUri); yourImageView.setImageBitmap(bitmap); // 更新UI:隐藏指定TextView、显示按钮 yourTargetTextView.setVisibility(View.GONE); yourResultButton.setVisibility(View.VISIBLE); } else { Toast.makeText(this, "未获取到有效图片数据", Toast.LENGTH_SHORT).show(); } } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "图片加载失败", Toast.LENGTH_SHORT).show(); } } } }
2. 用Picasso加载图片的优化方案
既然你计划用Picasso,那这个方案更省心——Picasso会自动处理Bitmap的内存管理、异常捕获,适配Android 7的环境也没问题。修改后的代码如下:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && (requestCode == PICTURE_RESULT || requestCode == GALLERY_RESULT)) { if (data != null && data.getData() != null) { Uri selectedImageUri = data.getData(); // 用Picasso加载图片到ImageView Picasso.get() .load(selectedImageUri) // 可选:添加占位图或错误图 .placeholder(R.drawable.placeholder_image) .error(R.drawable.error_image) .into(yourImageView); // 执行UI更新操作 yourTargetTextView.setVisibility(View.GONE); yourResultButton.setVisibility(View.VISIBLE); } else { Toast.makeText(this, "图片获取失败,请重试", Toast.LENGTH_SHORT).show(); } } }
注意:记得在你的项目依赖中添加Picasso的引用,比如在build.gradle(Module级别)里加入:
implementation 'com.squareup.picasso:picasso:2.71828'
额外排查点
- 确认调用图库的Intent时,传入的requestCode确实是
GALLERY_RESULT(值为2),避免请求时用了别的值导致不匹配。 - Android 7需要申请
READ_EXTERNAL_STORAGE权限才能访问图库,记得在Manifest里声明权限,并且在运行时动态申请。
内容的提问来源于stack exchange,提问作者TattooedJoey
相关产品推荐
相关产品推荐

