将ImageView保存到图库 - 代码无法正常工作

4

这是我在这里的第一个问题。我已经搜索过我的疑问了。我发现了类似的问题,但我并没有确切地得到我的答案。所以如果我做错了什么,请原谅我。

我正在尝试将应用程序中ImageView中的图像保存到SD卡中的文件夹中。 以下是代码:

public void save(View view) {
    myImage.setDrawingCacheEnabled(true);
    Bitmap imgV = myImage.getDrawingCache();
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/AVP_saved");
    String fname="Image.png";
    File file = new File(myDir, fname);
        try {
               FileOutputStream out = new FileOutputStream(file);
               imgV.compress(Bitmap.CompressFormat.PNG, 90, out);
               out.flush();
               out.close();
               Toast.makeText(this, "Image Downloaded", 7000).show();

        } catch (Exception e) {
               e.printStackTrace();
               Toast.makeText(this, e.getMessage(), 8000).show();
        }
    }

"save"方法是指定给按钮的方法。"myImage"是通过其ID找到的ImageView。我已经在清单中设置了权限。问题在于,图像没有保存,并显示路径不存在。当我自己创建文件夹“AVP_saved”时,图像保存了。我需要编辑这段代码以使应用程序在我点击按钮时自动创建文件夹吗?
感谢您的时间!

你唯一的问题是如果目录AVP_saved不存在,你的代码不会创建文件,对吗?如果该目录存在,一切都没问题? - Astrorvald
是的,你上面说的一切都是完全正确的! - Anas Khan
1个回答

1
File myDir = new File(root + "/AVP_saved"); 后添加此代码。
if(!myDir.exists()) {
  mydir.mkdir(); //you can else call mkdirs() if you have to create a complete directory hierarchy
}

在Java中,似乎不可能通过仅创建其中一个文件来创建目录层次结构。 因此,只有在目录不存在时才会创建您的目录(请注意,如果该目录已存在但是它是一个文件,则可能会引发异常,因此您也可以查找myDir.isDirectory())。


谢谢,你的回答帮了我很多。我只是有一个疑问,如果你不介意的话——为什么那张图片没有出现在我的相册里? - Anas Khan
1
我认为你可以在这里找到解决方案:https://dev59.com/8HI95IYBdhLWcg3wwwuY - Astrorvald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接