Android 下载网络图片保存到本地

通过网络地址获取网络图片,点击下载将图片显示出来,然后点击图片将图片保存到本地。

首先需要在manifest上添加一些权限:

[java]  view plain  copy
  1. <!-- 访问网络的权限 -->  
  2. <uses-permission android:name="android.permission.INTERNET" />  
  3. <!-- 文件读取的权限 -->  
  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
  5. <!-- 向SD卡中创建或者删除的权限。 -->  
  6. <uses-permission android:name="andorid.permission.MONUN_UNMOUNT_FILESYSTEMS"/>  
[java]  view plain  copy
  1.   
[java]  view plain  copy
  1. package com.xjw.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.InputStream;  
  6. import java.net.HttpURLConnection;  
  7. import java.net.URL;  
  8. import android.os.AsyncTask;  
  9. import android.os.Bundle;  
  10. import android.os.Environment;  
  11. import android.os.Handler;  
  12. import android.os.Message;  
  13. import android.app.Activity;  
  14. import android.graphics.Bitmap;  
  15. import android.graphics.BitmapFactory;  
  16. import android.view.View;  
  17. import android.view.View.OnClickListener;  
  18. import android.widget.Button;  
  19. import android.widget.ImageView;  
  20. import android.widget.Toast;  
  21.   
  22. public class MainActivity extends Activity implements OnClickListener{  
  23.   
  24.     Button content;  
  25.     ImageView image;  
  26.     Bitmap bitmap;  
  27.     protected void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.activity_main);  
  30.         content=(Button)findViewById(R.id.content);  
  31.         image=(ImageView)findViewById(R.id.image);  
  32.           
  33.         content.setOnClickListener(this);;  
  34.         image.setOnClickListener(this);;  
  35.     }  
  36.       
  37.     /** 
  38.      * 获取网络图片 
  39.      * @param imageurl 图片网络地址 
  40.      * @return Bitmap 返回位图 
  41.      */  
  42.     public Bitmap GetImageInputStream(String imageurl){  
  43.         URL url;  
  44.         HttpURLConnection connection=null;  
  45.         Bitmap bitmap=null;  
  46.         try {  
  47.             url = new URL(imageurl);  
  48.             connection=(HttpURLConnection)url.openConnection();  
  49.             connection.setConnectTimeout(6000); //超时设置  
  50.             connection.setDoInput(true);   
  51.             connection.setUseCaches(false); //设置不使用缓存  
  52.             InputStream inputStream=connection.getInputStream();  
  53.             bitmap=BitmapFactory.decodeStream(inputStream);  
  54.             inputStream.close();  
  55.         } catch (Exception e) {  
  56.             e.printStackTrace();  
  57.         }  
  58.         return bitmap;  
  59.     }  
  60.       
  61.     public void onClick(View v) {  
  62.         switch (v.getId()) {  
  63.         case R.id.content:  
  64.             //加入网络图片地址  
  65.             new Task().execute("http://pic.4j4j.cn/upload/pic/20130617/55695c3c95.jpg");  
  66.             break;  
  67.               
  68.         case R.id.image:  
  69.             //点击图片后将图片保存到SD卡跟目录下的Test文件夹内  
  70.             SavaImage(bitmap, Environment.getExternalStorageDirectory().getPath()+"/Test");  
  71.             Toast.makeText(getBaseContext(), "图片保存", Toast.LENGTH_SHORT).show();  
  72.             break;  
  73.               
  74.         default:  
  75.             break;  
  76.         }  
  77.     }  
  78.       
  79.     Handler handler=new Handler(){  
  80.         public void handleMessage(android.os.Message msg) {  
  81.             if(msg.what==0x123){  
  82.                 image.setImageBitmap(bitmap);  
  83.             }  
  84.         };  
  85.     };  
  86.       
  87.       
  88.     /** 
  89.      * 异步线程下载图片 
  90.      * 
  91.      */  
  92.     class Task extends AsyncTask<String, Integer, Void>{  
  93.   
  94.         protected Void doInBackground(String... params) {  
  95.             bitmap=GetImageInputStream((String)params[0]);  
  96.             return null;  
  97.         }  
  98.           
  99.         protected void onPostExecute(Void result) {  
  100.             super.onPostExecute(result);  
  101.             Message message=new Message();  
  102.             message.what=0x123;  
  103.             handler.sendMessage(message);  
  104.         }  
  105.           
  106.     }  
  107.       
  108.     /** 
  109.      * 保存位图到本地 
  110.      * @param bitmap 
  111.      * @param path 本地路径 
  112.      * @return void 
  113.      */  
  114.     public void SavaImage(Bitmap bitmap, String path){  
  115.         File file=new File(path);  
  116.         FileOutputStream fileOutputStream=null;  
  117.         //文件夹不存在,则创建它  
  118.         if(!file.exists()){  
  119.             file.mkdir();  
  120.         }  
  121.         try {  
  122.             fileOutputStream=new FileOutputStream(path+"/"+System.currentTimeMillis()+".png");  
  123.             bitmap.compress(Bitmap.CompressFormat.JPEG, 100,fileOutputStream);  
  124.             fileOutputStream.close();  
  125.         } catch (Exception e) {  
  126.             e.printStackTrace();  
  127.         }  
  128.     }  
  129. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值