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

本教程将介绍Android – 将下载的图像从 URL 保存到 SD 卡上的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

问题描述

我正在单击按钮时从 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(),它应该可以工作.

好了关于Android – 将下载的图像从 URL 保存到 SD 卡上的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。

0
没有账号?注册  忘记密码?