为什么我从下面的代码中得到这个 IOException



我有我的bitmapI want to convert my bitmap to save as image in another new file by below code.

注意:除Galaxy S3外,它在所有设备中都能正常工作。 任何人都可以帮助我使此代码在 S3 中可用。 在转换为新文件时,我总是得到这个 Toast。 任何人都知道可能会出现什么问题。

Bitmap photo = (Bitmap) extras.get("data");
                selectedImagePath = String.valueOf(System.currentTimeMillis())
                        + ".jpg";
                Log.i("TAG", "new selectedImagePath before file "
                        + selectedImagePath);
                File file = new File(Environment.getExternalStorageDirectory(),
                        selectedImagePath);
                try {
                    file.createNewFile();
                    FileOutputStream fos = new FileOutputStream(file);
                    photo.compress(Bitmap.CompressFormat.PNG, 95, fos);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    Toast.makeText(this,
                            "Sorry, Camera Crashed-Please Report as Crash A.",
                            Toast.LENGTH_LONG).show();
                }

提前谢谢。

存储可能未处于要写入的状态,发生这种情况的原因有很多。您应该在访问外部存储之前检查getExternalStorageState。即使它没有在其他设备上发生,它也可能发生,所以最好防范它。

如果外部存储MEDIA_MOUNTED,并且您的问题仍然存在,您可以通过向Toast或日志添加e.getMessage()来查看导致异常的原因,从而更好地处理正在发生的事情。

您似乎还在使用顶级目录来存储文件。 这应该不会导致技术问题,但最好为应用创建一个子目录并将文件存储在其中。 来自getExternalStorageDirectory文档 -

应用程序不应直接使用此顶级目录,在 以避免污染用户的根命名空间。

相关内容

  • 没有找到相关文章

最新更新