开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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.  本地路径 
    113.      * @return void 
    114.      */  
    115.     public void SavaImage(Bitmap bitmap, String path){  
    116.         File file=new File(path);  
    117.         FileOutputStream fileOutputStream=null;  
    118.         //文件夹不存在,则创建它  
    119.         if(!file.exists()){  
    120.             file.mkdir();  
    121.         }  
    122.         try {  
    123.             fileOutputStream=new FileOutputStream(path+"/"+System.currentTimeMillis()+".png");  
    124.             bitmap.compress(Bitmap.CompressFormat.JPEG, 100,fileOutputStream);  
    125.             fileOutputStream.close();  
    126.         } catch (Exception e) {  
    127.             e.printStackTrace();  
    128.         }  
    129.     }  



    本文转自 一点点征服   博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6237943.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android异步加载图片详解之方式二(3)
main.xml如下:   listviewitem.xml如下:   ...
741 0
Android异步加载图片详解之方式一(2)
FileCache.java如下: package cn.loadImages; import java.io.File; import android.
728 0
Android异步加载图片详解之方式一(1)
MainActivity.java如下: package cn.ideallistview; import java.util.ArrayList; import android.
860 0
Android异步加载图片详解之方式二(2)
FileCache.java如下: package com.cn.loadImages; import java.io.File; import java.
766 0
Android异步加载图片详解之方式二(1)
MainActivity.java如下: package com.cn.perfectlistview; import java.util.ArrayList; import android.
793 0
Android异步加载图片详解之方式一(4)
main.xml如下: listviewitem.xml如下:  
722 0
Android异步加载图片详解之方式一(3)
Utils.java如下: package cn.loadImages; import java.io.InputStream; import java.
778 0
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
87 0
Android开发重要参考资料
=======================博客============================= 秋百万 有心课堂 郭霖 源码 安装ffmpeg 胡凯 官方培训课程 litesuitsway 爱哥 trinea robinRobin Hu...
827 0
21114
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载