• 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

  • 相关阅读:
    Balder 3D开发系列之创建基本动画
    Expression Blend 的点滴(1)ListBox华丽大变身
    Balder 3D开发系列之创建天空盒
    Balder 3D开发系列之创建自己的primitives
    silverlight 中的应用程序库缓存
    Balder 3D开发系列之——sprite结合Camera旋转木马特效
    VisualTreeHelper不仅仅只是用来查看可视化树结构的
    Balder 3D开发系列之与Sprite初次相遇
    Balder 3D开发系列之给自定义基本体进行贴图操作
    【图解】通过Expression Blend快速制作具有物理效果的动画游戏
  • 原文地址:https://www.cnblogs.com/manmanlu/p/4585454.html
Copyright © 2020-2023  润新知