Android Studio调用相机拍照后上传Firebase时应用崩溃排查
崩溃原因与解决方案
崩溃原因
报错信息明确指向类型转换异常:android.net.Uri$HierarchicalUri cannot be cast to java.lang.CharSequence,错误出现在代码第93行,对应被注释的Toast语句:
//Toast.makeText(RegisterID.this, (CharSequence) frontIDUri, Toast.LENGTH_LONG).show();
即使代码中注释了该行,可能是编译缓存未清理导致旧代码仍在运行,或者实际测试时该行未被注释。核心问题是将Uri对象强制转换为CharSequence类型,Uri并不继承CharSequence接口,强转操作必然触发类型转换异常,导致应用崩溃。
修复方案
- 修正Toast参数传递:如果需要显示Uri内容,调用
Uri.toString()方法将其转为字符串,而非强制类型转换:Toast.makeText(RegisterID.this, frontIDUri.toString(), Toast.LENGTH_LONG).show(); - 清理编译缓存:若代码已注释该行但仍报错,执行Android Studio的
Build > Clean Project和Build > Rebuild Project操作,清除旧的编译缓存,确保运行最新代码。 - 添加空指针防护:在处理相机返回结果时,增加空值判断,避免因返回数据为空触发额外的空指针异常:
@Override public void onActivityResult(ActivityResult result) { // 先判断返回结果是否成功且数据不为空 if (result.getResultCode() == RESULT_OK && result.getData() != null) { Bundle frontExtras = result.getData().getExtras(); if (frontExtras != null) { Bitmap bitmap = (Bitmap) frontExtras.get("data"); if (bitmap != null) { Front_Image_id.setImageBitmap(bitmap); WeakReference<Bitmap> FrontResult = new WeakReference<>(Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), false).copy(Bitmap.Config.RGB_565, true)); Bitmap FrontBM = FrontResult.get(); if (FrontBM != null) { Uri frontIDUri = saveFrontImage(FrontBM, RegisterID.this); // 显示Uri前先判断Uri是否为空 if (frontIDUri != null) { Toast.makeText(RegisterID.this, frontIDUri.toString(), Toast.LENGTH_LONG).show(); } } } } } }
内容的提问来源于stack exchange,提问作者Jamen_98
相关产品推荐
相关产品推荐

