找不到存储的图像

2024-03-14

我目前正在使用此代码来存储图像(可能是错误的)。

路径是这样的:

public static final String IMAGE_DIR = "test";

保存图像的代码如下:

public class ImageSaver {

    private String directoryName = Constants.IMAGE_DIR;
    private String fileName = "";
    private Context context;
    private boolean external;

    public ImageSaver(Context context) {
        this.context = context;
    }

    public ImageSaver setFileName(String fileName) {
        this.fileName = fileName;
        return this;
    }

    public ImageSaver setExternal(boolean external) {
        this.external = external;
        return this;
    }

    public ImageSaver setDirectoryName(String directoryName) {
        this.directoryName = directoryName;
        return this;
    }

    public int save(Bitmap bitmapImage, int jpgOrPng) {
        FileOutputStream fileOutputStream = null;
        try {

            fileOutputStream = new FileOutputStream(createFile());
            if(jpgOrPng == 0) {
                bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);

            } else {

                bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
            }
            Log.d("THE PICTURE ", " The picture finished saving");

        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        } finally {
            try {
                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }
                return 1;
            } catch (IOException e) {
                e.printStackTrace();
                return 0;
            }
        }
    }

    @NonNull
    private File createFile() {
        File directory;
        if(external){
            directory = getAlbumStorageDir(directoryName);
        }
        else {
            directory = context.getDir(directoryName, Context.MODE_PRIVATE);
        }
        if(!directory.exists() && !directory.mkdirs()){
            Log.e("ImageSaver","Error creating directory " + directory);
        }

        return new File(directory, fileName);
    }

    private File getAlbumStorageDir(String albumName) {
        return new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), albumName);
    }

    public static boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        return Environment.MEDIA_MOUNTED.equals(state);
    }

    public static boolean isExternalStorageReadable() {
        String state = Environment.getExternalStorageState();
        return Environment.MEDIA_MOUNTED.equals(state) ||
                Environment.MEDIA_MOUNTED_READ_ONLY.equals(state);
    }

    public Bitmap load() {
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(createFile());
            return BitmapFactory.decodeStream(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    public boolean deleteFile(){ File file = createFile(); return file.delete(); }
}

我在主页上这样称呼它:

Bitmap foodImage = getImageBitmapFromURL(this, Constants.FOOD_IMAGE + menuItemReponseList.get(storeItemCounter).getPicture());
        String pictureToCheck = menuItems.get(0).getPicture();
        String[] words = pictureToCheck.split(Pattern.quote("."));
        String newPic = words[0];
    int jpgOrPng = 0;
        if(newPic.equals("png")) {
            jpgOrPng = 1;
            Log.d("THE PICTURE IS ", "Poc  png: " + newPic);
        }
        int done = new ImageSaver(this).
                    setFileName(menuItems.get(0).getPicture()).
                    setDirectoryName(Constants.IMAGE_DIR).
                    save(foodImage, jpgOrPng);

这是 getBitmap 方法:

public static Bitmap getImageBitmapFromURL(final Context context, final String imageUrl){

        Bitmap imageBitmap = null;
        try {
            imageBitmap = new AsyncTask<Void, Void, Bitmap>() {
                @Override
                protected Bitmap doInBackground(Void... params) {
                    try {
                        int targetHeight = 200;
                        int targetWidth = 300;

                        return Picasso.get().load(String.valueOf(imageUrl))
                                .resize(targetWidth, targetHeight)
                                .placeholder(R.drawable.burger)
                                .error(R.drawable.burger)
                                .get();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
                }
            }.execute().get();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return imageBitmap;
    }

这段代码的目的是使图像可以离线使用,这样它们就可以从互联网上下载,然后像这样指向并加载:

  Bitmap bitmap = new ImageSaver(this).
                                setFileName(newPic).
                                setDirectoryName(Constants.IMAGE_DIR).
                                load();

                    homeSuggestPic.setImageBitmap(bitmap);

我试图找到它存储的目录,以确保它确实存储在设备上。不幸的是,当使用文件管理器时,我的应用程序名称甚至不会显示在数据下或任何地方。想一想,我是否存储错误?


该代码实际上有效,我犯了一个错误,一直只存储图像的索引 0。我会将代码留给任何想要使用它的人,只需更改这一行String pictureToCheck = menuItems.get(0).getPicture();for get 0 到实际的循环图像

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找不到存储的图像 的相关文章

随机推荐

  • SQL 异步多个查询合并结果 - 最大结果(顶部 XYZ)

    我设置了一个搜索功能 可以同时运行多个查询 每个查询的前 1000 个结果将写入表中 这些运行异步 我只是省略了我用来执行此操作的代码 Insert into Results Select Top 1000 Text from A wher
  • 查找包含缺失值的列的名称

    我想找到所有列的名称NA或丢失数据并将这些列名称存储在向量中 create matrix a lt c 1 2 3 4 5 NA 7 8 9 10 NA 12 13 14 NA 16 17 18 19 20 cnames lt c aa b
  • 调用Jenkins插件(thinBackup)的内部方法

    我需要调用一些 Jenkins 插件的内部函数 这些插件似乎没有通过 Jenkins CLI 或远程 api 公开 例如 其中之一是thinBackup 我想致电restore方法可在https github com jenkinsci t
  • SQL 中跨多列的 Like 语句

    我正在尝试跨多个列查询类似的语句 我有以下搜索词 狗 猫 兔子 沙鼠 豚鼠 仓鼠 我需要在 动物 表中搜索这些术语或类似的术语 该表有大约 40 个不同的列 我知道我可以通过做类似的声明 Select from animals where
  • 以编程方式检索所有维基百科语言的列表

    我需要检索某个 wiki 项目的所有现有语言的列表 例如 所有维基导游 https www wikivoyage org or all 维基百科 https www wikipedia org语言 就像他们的登陆页面一样 我更喜欢通过这样做
  • 我在哪里可以获取 Kubernetes 安装中的 API_KEY

    一直在尝试让 kubernetes 的 python 客户端按预期工作 祝你好运config load kube config 现在我想从远程机器使用Python客户端 而远程机器都没有kubectl nor kube config在上面
  • Bootstrap 导航栏折叠点 < 768px

    这是 Bootstrap 3 的一个老问题 gt 更改导航栏的折叠点 但这里建议的方法是 https coderwall com p wpjw4w change the bootstrap navbar breakpoint https c
  • 我的 spring+hibernate 应用程序不关闭 jdbc 连接

    我在生产中有一个 Spring Hibernate Tomcat MySql 应用程序 我遇到了问题 我认为应用程序没有关闭它的 jdbc 连接 当它达到其限制 当前为 200 时 应用程序停止响应 我必须重新启动 tomcat 我需要在某
  • 如何在 Mac 中运行 .jar?

    我写了一个相对简单的java应用程序 我的 PC 上有 JDK 但我需要它在学校的 Mac 上运行 这 jar在我的 PC 上运行完美 但我在 Macintosh 上测试了它 顺便说一句 它没有安装 JDK 为什么mac上不能运行 我怎样才
  • SocketException 现有连接被远程主机强制关闭

    我决定研究一下网络消息传递等 我的第一个调用端口是 UDP 我遇到的问题是当我尝试发送消息时 我试图访问特定端口上的 IP 但应用程序出现错误 SocketException 现有连接被远程主机强制关闭 这是代码 User ME new U
  • 如何使用 Azure 数据工厂管道调用 REST API?

    我想使用 ADF Pipeline 执行具有 oauth 身份验证的 REST API 如果没有 oauth2 我可以调用任何 REST API 所以我的问题是 这个 ADF 管道是否支持带有 oauth2 身份验证的 REST API 如
  • Go 中的测试是并行执行还是一项一项执行?

    我有一个包含单元测试的 Go 文件 其中一些使用公共变量 我正在测试的代码中使用了另一个全局变量 所有这些都可能导致问题 在 Go 中 当我们执行位于同一文件中的测试时 它们如何运行 并行或在上一个完成之前下一个不会开始 默认情况下 所有测
  • C# 对结构的“is”类型检查 - 奇怪的 .NET 4.0 x86 优化行为

    Update 我已经提交了一份错误报告 https connect microsoft com VisualStudio feedback details 558649 c is type check on struct odd net 4
  • 在 Swift 中访问 Objective-C 指针

    我有这个 Objective C 代码片段 我想用 Swift 表达它 CFArrayRef windowList AXUIElementCopyAttributeValue appRef kAXWindowsAttribute CFTyp
  • Json 结果在浏览器中提示“另存为”对话框,而不是被处理。 ASP.NET MVC

    我知道这对其他人来说也是一个问题 但我还没有找到任何可以解决我的问题的方法 我有一个显示在灯箱 颜色箱 中的部分视图 这是一个简单的形式 我希望表单提交并返回一些数据 这些数据将用于调用后续函数 我希望主 DIV 只用 成功 消息进行更新
  • 使用 libx264 压缩一组图像时,为什么帧速率会影响最终输出大小?

    我正在使用 ffmpeg 使用 libx264 编解码器将一组图像编码为短延时视频 我的第一次尝试以 30 FPS 的速度进行编码 使用 ffmpeg r 30 pattern type glob i jpg vcodec libx264
  • SoapUI 更改(禁用)Internet Explorer 的代理设置

    已安装肥皂UI 4 5 1 当我启动soapUI时 它禁用了IE 8中的所有复选框Internet Options gt Connection gt LAN Settings 如果我在soapUI中输入代理 gt File Preferen
  • 如何在 Yii 查询生成器中使用 LIKE

    如何使用 YIi 查询构建器构建此查询 SELECT FROM table WHERE type item 2 AND name item LIke name 我尝试过这样 return Yii app gt db gt createCom
  • .net core应用程序中如何进行基于组的授权?

    净核心应用程序 我的要求是添加基于组的授权 我是 Azure AD 的用户 我属于一些名称以 BR 和 AR 开头的组 属于 AR 组的用户只能访问我的 API 目前我的客户端应用程序是 Swagger 我仅通过 swagger 访问 AP
  • 找不到存储的图像

    我目前正在使用此代码来存储图像 可能是错误的 路径是这样的 public static final String IMAGE DIR test 保存图像的代码如下 public class ImageSaver private String