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

时间:2023-03-09 06:39:46
android网络编程--从网络下载图片,并保存到内存卡

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

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

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

demo下载地址:

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