Android - 将下载的图像从 URL 保存到 SD 卡上

2023-12-03

我在单击按钮时从 URL 加载图像,并将其存储为位图。现在我想知道如何将下载的图像保存到 SD 卡以及系统中。

我尝试按以下方式进行操作:

package com.v3.thread.fetchImage;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainThreadActivity extends Activity {
    ImageView imView;
    EditText ed1;
    Bitmap bmImg;
    Button bt, btSave;
    String imageUrl = "";
    int visibilty = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        ed1 = (EditText) findViewById(R.id.edURL);
        btSave = (Button) findViewById(R.id.btnSave);

        bt = (Button) findViewById(R.id.btnLoad);
        bt.setOnClickListener(getImgListener);

        imView = (ImageView) findViewById(R.id.imview);
        Log.i("img already downloaded", "img");
        btSave.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                Log.i("img url", "Under Save");
                saveImage();
            }
        });
    }

    View.OnClickListener getImgListener = new View.OnClickListener() {

        public void onClick(View view) {
            // TODO Auto-generated method stub
            imageUrl = ed1.getText().toString();
            if (imageUrl.equals(""))

                Toast.makeText(getApplicationContext(), "Enter an URL first",   1000).show();       
downloadFile(imageUrl);
            Log.i("im url", imageUrl);
            btSave.setVisibility(visibilty);
        }

    };

    void downloadFile(String fileUrl) {
        URL myFileUrl = null;
        try {
            myFileUrl = new URL(fileUrl);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            HttpURLConnection conn = (HttpURLConnection) myFileUrl
                    .openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            Log.i("im connected", "Download");
            bmImg = BitmapFactory.decodeStream(is);

            imView.setImageBitmap(bmImg);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    void saveImage() {
        File filename;
        try {
            String path = Environment.getExternalStorageDirectory().toString();
            Log.i("in save()", "after mkdir");
            new File(path + "/mvc/mvc").mkdir();
            filename = new File(path + "/mvc/mvc/var3.jpg");
            Log.i("in save()", "after file");
            FileOutputStream out = new FileOutputStream(filename);
            Log.i("in save()", "after outputstream");
            bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();
            Log.i("in save()", "after outputstream closed");
            MediaStore.Images.Media.insertImage(getContentResolver(),
                    filename.getAbsolutePath(), filename.getName(),
                    filename.getName());
            bt.setText("Saved...");
            Toast.makeText(getApplicationContext(),
                    "File is Saved in  " + filename, 1000).show();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

从 URL 加载图像正常,但是当我按下“保存”按钮保存它时,它会抛出异常

java.io.FileNotFoundException:/mnt/sdcard/mvc/mvc/var3.image(没有这样的 文件或目录)

那么如何正确将图片保存到SD卡呢?


您需要首先创建要在其中创建文件的目录和子目录。 我看到您使用了 mkdir() 方法。尝试 mkdirs(),它应该可以工作。

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

Android - 将下载的图像从 URL 保存到 SD 卡上 的相关文章

随机推荐

  • 在两个未在 twilio 中注册的号码之间拨打电话

    有什么方法可以在我的两个用户之间拨打电话吗 我的意思是 我有一个带有注册号码的 twilio 帐户 我必须给我的客户 Bill 打电话 所以当他接听电话时 电话应该重定向到 Bill 选择的另一个客户 让我们说 Joe 因此 比尔点击了一个
  • 使用静态函数实现特征对特征

    trait Trait
  • 如何在c#中从RGB555转换为RGB888?

    我需要将 16 位 XRGB1555 转换为 24 位 RGB888 我的函数如下 但它并不完美 即值 0b11111 将给出 248 作为像素值 而不是 255 该函数适用于小端 但可以轻松修改为大端 public static Colo
  • 工头没有反映变化

    我用这篇文章搭建了facebook app开发的开发环境 https devcenter heroku com articles facebook create an app除了 FOREMAN 之外 一切都很好 问题是 每次我在脚本中进行
  • 如何在matlab中绘制非线性微分方程

    Dx y Dy k y x 3 9 8 cos t inits x 0 0 y 0 0 这些是我想要绘制的微分方程 首先 我尝试求解微分方程 然后绘制图形 Dsolve Dx y Dy k y x 3 9 8 cos t inits 然而
  • android openFileOutput 有什么问题?

    我正在尝试使用 openFileOutput 函数 但它无法编译并且无法识别该函数 我使用的是android sdk 1 6 这是sdk的问题吗 这是参数问题吗 import java io FileOutputStream public
  • 约束最小二乘法

    我正在 R 中对人均天然气使用量进行简单回归 回归公式如下 gas b lt lm log gasq pop log gasp log pcincome log pn log pd log ps log years data gas sum
  • 带有图像和 2 TextView 的 TableRow

    我在做这样的事情时遇到问题 http imageshack us photo my images 824 examplehm png 我的 xml 代码在行中显示 3 列 但我想要 2 列 并且第二列必须分为两个水平部分 My xml
  • ffmpeg 中的多个命名管道

    这个问题是后续这个问题 在我的应用程序中 我想修改各种mp3 然后将它们混合在一起 我知道我可以在 FFmpeg 中使用单个命令行来完成此操作 但它最终可能会非常混乱 因为我需要在每个样本上使用各种过滤器 而我有五个过滤器 我的想法是单独编
  • Windows批处理文件-分割字符串以设置变量

    我觉得我在用 FOR 循环选项兜圈子 我试图获取一个字符串 命令的输出 并用逗号分隔它 然后使用每个值来设置 例如 String USER Andy IP 1 2 3 4 HOSTNAME foobar PORT 1234 所以我想用逗号分
  • SonarQube:扫描过程忽略 lcov.info

    我正在扫描ui项目 源代码位于typescript gulp test coverage产生 js文件 然后扫描其覆盖范围 每个 ts文件得到一个 js文件就在它旁边 在同一位置 我将扫描仪指向lcov info文件如下 sonar jav
  • jssor 与 Angular 2 Typescript

    我正在使用 Angular 2 开发一个网站 此时 我已经购买了 Jssor 的订阅 以便为运行到同一页面的 3 个以上单独的滑块生成图像滑块 我当前的问题是文档加载后生成的动态滑块 但未显示 我在 npmjs com 中找到了 jssor
  • 如何在R中绘制完整的图?

    我想在 R 中绘制完整的图表 我怎样才能做到这一点 我在 CRAN 上发现只有一个包具有生成完整图表的功能 但是这个包 即 RnavGraph 没有安装 而是以错误状态退出 进一步搜索似乎很困难 因为图的含义不同 图不仅与图结构相关 而且还
  • 修改颜色选择器面板

    我正在创建一个颜色选择器 需要修改其中一个颜色选择器面板 我想要的是 我想通过 RGB 字段输入输入值来设置颜色 问题是 RGB 值似乎被禁用 api 中是否有一种方法可以打开 RGB 输入以获取值 这里看起来不错 import javax
  • CSS3 中是否有相当于 jQuery 的 :first 选择器?

    我有以下标记 div class a div div class b div div class b div div class b div div class c div 我正在尝试瞄准first and last div 与类b 如果我
  • Firebase 9 + NextJS 12 - 预计 collection() 的第一个参数是 CollectionReference、DocumentReference 或 FirebaseFirestore

    我正在尝试在 NextJS 应用程序中创建一个简单的 Firestore 数据库查询 I have clientApp ts看起来像这样 import firebase compat auth import firebase compat
  • 将锁定的 std::unique_lock 移交给新线程

    考虑下面的例子 我创建了一个std mutex 锁定它 然后将锁交给另一个线程 include
  • 结构需要一生,因为?

    每条语句都标有 希望得到断言 我只是慢慢地度过一生 由于生命周期省略有助于省略明确描述生命周期 有些情况我们需要描述它们 一个示例可能是包含引用的结构 struct Person
  • 空手道 UI - 并行运行场景会引发错误“HttpHostConnectException:连接到 localhost:9222”

    我正在尝试使用以下方法执行包含 3 个场景的功能 Results results Runner parallel tagQuery featurePaths null new ArrayList lt gt 3 karateOutputPa
  • Android - 将下载的图像从 URL 保存到 SD 卡上

    我在单击按钮时从 URL 加载图像 并将其存储为位图 现在我想知道如何将下载的图像保存到 SD 卡以及系统中 我尝试按以下方式进行操作 package com v3 thread fetchImage import java io File