卧式纯绿 2024-05-06 21:33 采纳率: 64.3%
浏览 5
已结题

安卓开发摄像头预览后拍摄照片并存储在相册中,通过照片路径转换为bitmap类型并展示在界面上出错,如何解决?

安卓开发摄像头预览后拍摄照片并存储在相册中,通过照片路径转换为bitmap类型并展示在界面上出错

img


这是存储方法和取得的文件路径转换bitmap并展示的代码,按道理来说没有问题,但是在手机上一运行就会直接退出

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-06 21:33
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的代码片段,看起来您在尝试从相机获取原始数据,并将其保存到外部存储,然后将图片路径加载到一个ImageView中。这通常应该工作,但可能由于几个原因导致应用程序崩溃。让我们逐步检查可能的问题并提供相应的修复。

    首先,确保您的AndroidManifest.xml文件中添加了必要的权限:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

    接下来,优化您的代码以减少潜在的异常。例如,您可以使用try-with-resources语句自动关闭流,以及对decodeFile()方法进行错误处理。以下是修改后的代码:

    public void run() {
        ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
        byte[] data = new byte[buffer.remaining()];
        buffer.get(data);
    
        String path = Environment.getExternalStorageDirectory().toString() + "/DCIM/CameraV2/";
        File imageDir = new File(path);
        if (!imageDir.exists()) {
            imageDir.mkdirs();
        }
    
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
        String fileName = path + "IMG_" + timeStamp + ".jpg";
    
        try (FileOutputStream fos = new FileOutputStream(fileName)) {
            fos.write(data, 0, data.length);
        } catch (IOException e) {
            Log.e("CameraApp", "Error writing file: " + e.getMessage());
        }
    
        // Check for null bitmap and handle it gracefully
        Bitmap bitmap = BitmapFactory.decodeFile(fileName);
        if (bitmap != null) {
            imageView.setImageBitmap(bitmap);
        } else {
            Log.e("CameraApp", "Failed to load bitmap from file");
            // Optionally, you can show a placeholder or error message here.
        }
    }
    

    此外,您可能需要检查是否正确地设置了mImage(来自CameraCaptureSession.CaptureCallback.OnCaptureCompleted)。确保您在捕获回调中正确处理图像。

    如果您仍然遇到问题,建议您使用Logcat查看应用崩溃时的日志输出,以便确定具体错误原因。同时,确保目标设备支持写入外部存储,因为从Android 10开始,系统要求应用请求动态存储权限。

    如果问题依然存在,请提供更多关于错误日志的信息,以便我能更准确地定位问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月9日
  • 创建了问题 5月6日

悬赏问题

  • ¥15 mySQL5.7.34安装遇到的问题
  • ¥15 结构功能耦合指标计算
  • ¥20 visual studio中c语言用ODBC链接SQL SERVER
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊