Android:将文件保存到SD卡时出错

时间:2012-12-08 21:29:49

标签: java android image permissions sd-card

我一直试图将JPG图像保存到SD卡,然后将其缩小并在ImageView中显示(由于原始尺寸导致内存不足错误)。

这是我用来保存文件的方法:

public void saveImage(String src) throws IOException{
        URL url = new URL (src); 
        InputStream input = url.openStream(); 
        try {     
            File storagePath = Environment.getExternalStorageDirectory();
            OutputStream output = new FileOutputStream (new File(storagePath, "myImage.jpg"));     
            try {         
                byte[] buffer = new byte[1024];         
                int bytesRead = 0;         
                while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
                        output.write(buffer, 0, bytesRead);         
                }     
            }  
            finally {         
                output.close();     
            } 
        } 

        finally {     
            input.close(); 
        }
    }

然后这是当我调用该方法然后尝试将缩小的图像加载到内存并将其放入ImageView时:

try {
            saveImage(src);
        } catch (IOException e) {
            e.printStackTrace();
        }

        BitmapFactory.Options options = new BitmapFactory.Options();

        options.inSampleSize = 20;



        File storagePath = Environment.getExternalStorageDirectory();
        File file = new File(storagePath, "myImage.jpg");

        Bitmap scaledDownImage = BitmapFactory.decodeFile(file.getAbsolutePath(), options);


        imageFrame1.setImageBitmap(scaledDownImage);

但是,当我尝试运行它时,我收到LogCat消息说:

  

" java.io.FileNotFoundException:/mnt/sdcard/myImage.jpg:open failed:   EACCES(许可被拒绝)"

我也确保添加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

到清单。

有没有人有任何想法?

编辑:错误发生在第107行和第72行,这意味着当我尝试保存图像时会发生错误。

凹凸:任何人?非常感谢一些建议。

2 个答案:

答案 0 :(得分:0)

问题解决了!原来我需要改变的是saveImage方法中字节缓冲区的大小。它是在1024但是在将它提升到8192之后它运行良好!

感谢所有人的建议。

答案 1 :(得分:-1)

使用以下内容:

String  path = Environment.getExternalStorageDirectory()
                                .toString() + File.separator + "myImage.jpg";
OutputStream output = new FileOutputStream (path,true);