android网络编程--从网络下载图片,并保存到内存卡

功能1:从网络上取得的图片显示到imageview上面,生成Bitmap时有两种方法,一种是先转换为byte[],再生成bitmap;一种是直接用InputStream生成bitmap。功能2:点击按钮将显示的图片下载到sd卡上。原文地址:http://www.cnblogs.com/gzggyy/archive/2013/05/18/3085552.html

下面就贴一种直接用InputStream生成bitmap的代码吧,另外一种直接看原文咯。mark一下,方便自己用

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package com.robin.httpcommunicationtest;  
  2.   
  3. import java.io.BufferedOutputStream;  
  4. import java.io.File;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import java.net.HttpURLConnection;  
  9. import java.net.URL;  
  10.   
  11. import android.app.Activity;  
  12. import android.app.ProgressDialog;  
  13. import android.graphics.Bitmap;  
  14. import android.graphics.BitmapFactory;  
  15. import android.os.Bundle;  
  16. import android.os.Environment;  
  17. import android.os.Handler;  
  18. import android.os.Message;  
  19. import android.util.Log;  
  20. import android.view.View;  
  21. import android.widget.Button;  
  22. import android.widget.ImageView;  
  23. import android.widget.Toast;  
  24.   
  25. public class SaveImageActivity extends Activity {  
  26.   
  27.     private static final String TAG = "SaveImageActivity";  
  28.     private final static String ALBUM_PATH = Environment  
  29.             .getExternalStorageDirectory() + "/download_test/";  
  30.     private ImageView mImageView;  
  31.     private Button mBtnSave;  
  32.     private ProgressDialog mSaveDialog = null;  
  33.     private Bitmap mBitmap;  
  34.     private String mFileName;  
  35.     private String mSaveMessage;  
  36.     private Thread connectThread;  
  37.     private Thread saveThread;  
  38.   
  39.     @Override  
  40.     protected void onCreate(Bundle savedInstanceState) {  
  41.         // TODO Auto-generated method stub  
  42.         super.onCreate(savedInstanceState);  
  43.         setContentView(R.layout.image_download);  
  44.   
  45.         mImageView = (ImageView) findViewById(R.id.imgSource);  
  46.         mBtnSave = (Button) findViewById(R.id.btnSave);  
  47.   
  48.         connectThread = new Thread(connectNet);  
  49.         connectThread.start();  
  50.   
  51.         mBtnSave.setOnClickListener(new View.OnClickListener() {  
  52.   
  53.             @Override  
  54.             public void onClick(View arg0) {  
  55.                 mSaveDialog = ProgressDialog.show(SaveImageActivity.this,  
  56.                         "保存图片", "图片正在保存,请稍后...", true);  
  57.                 saveThread = new Thread(saveFileRunnable);  
  58.                 saveThread.start();  
  59.             }  
  60.         });  
  61.     }  
  62.   
  63.     private Runnable connectNet = new Runnable() {  
  64.   
  65.         @Override  
  66.         public void run() {  
  67.             try {  
  68.                 String filePath = "http://img.my.csdn.net/uploads/201402/24/1393242467_3999.jpg";  
  69.                 mFileName = "robin.jpg";  
  70.                 // 取得的是inputstream,直接从inputstream生成bitmap  
  71.                 mBitmap = BitmapFactory.decodeStream(getImageStream(filePath));  
  72.                 // 发送消息,通知handler在主线程中更新ui  
  73.                 connectHanlder.sendEmptyMessage(0);  
  74.                 Log.d(TAG, "set image ...");  
  75.             } catch (Exception e) {  
  76.                 Toast.makeText(SaveImageActivity.this, "无法链接网络!", 1).show();  
  77.                 e.printStackTrace();  
  78.             }  
  79.   
  80.         }  
  81.     };  
  82.     private Handler connectHanlder = new Handler() {  
  83.         @Override  
  84.         public void handleMessage(Message msg) {  
  85.             Log.d(TAG, "display image");  
  86.             // 更新UI,显示图片  
  87.             if (mBitmap != null) {  
  88.                 mImageView.setImageBitmap(mBitmap);// display image  
  89.             }  
  90.         }  
  91.     };  
  92.     private Runnable saveFileRunnable = new Runnable() {  
  93.   
  94.         @Override  
  95.         public void run() {  
  96.             try {  
  97.                 saveFile(mBitmap, mFileName);  
  98.                 mSaveMessage = "图片保存成功!";  
  99.             } catch (Exception e) {  
  100.                 mSaveMessage = "图片保存失败!";  
  101.                 e.printStackTrace();  
  102.             }  
  103.             messageHandler.sendMessage(messageHandler.obtainMessage());  
  104.         }  
  105.     };  
  106.   
  107.     private Handler messageHandler = new Handler() {  
  108.         @Override  
  109.         public void handleMessage(Message msg) {  
  110.             mSaveDialog.dismiss();  
  111.             Log.d(TAG, mSaveMessage);  
  112.             Toast.makeText(SaveImageActivity.this, mSaveMessage,  
  113.                     Toast.LENGTH_SHORT).show();  
  114.         }  
  115.     };  
  116.   
  117.     /*  
  118.      * 从网络获取图片  
  119.      */  
  120.     protected InputStream getImageStream(String path) throws Exception {  
  121.         URL url = new URL(path);  
  122.         HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  123.         conn.setConnectTimeout(10 * 1000);  
  124.         conn.setRequestMethod("GET");  
  125.         if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {  
  126.             return conn.getInputStream();  
  127.         }  
  128.         return null;  
  129.     }  
  130.   
  131.     /*  
  132.      * 保存文件  
  133.      */  
  134.     protected void saveFile(Bitmap bm, String fileName) throws IOException {  
  135.         File dirFile = new File(ALBUM_PATH);  
  136.         if (!dirFile.exists()) {  
  137.             dirFile.mkdir();  
  138.         }  
  139.         File myCaptureFile = new File(ALBUM_PATH + fileName);  
  140.         BufferedOutputStream bos = new BufferedOutputStream(  
  141.                 new FileOutputStream(myCaptureFile));  
  142.         bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);  
  143.         bos.flush();  
  144.         bos.close();  
  145.     }  
  146. }  


demo下载地址:

http://download.csdn.net/detail/lanhuzi9999/7507995

原文地址:https://www.cnblogs.com/manmanlu/p/4585454.html