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

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

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

Android 下载网络图片保存到本地的更多相关文章

  1. Retrofit 下载网络图片 保存到本地

    private void downImage(String imagePath) { try { CommonV2Api.downloadFile(mContext, imagePath, new I ...

  2. C#抓取网络图片保存到本地

    C#抓取网络图片保存到本地 System.Net.WebClient myWebClient = new System.Net.WebClient(); //将头像保存到服务器 string virP ...

  3. C# 中从网络上下载文件保存到本地文件

    下面是C#中常用的从Internet上下载文件保存到本地的一些方法,没有太多的技巧. 1.通过  WebClient  类下载文件 WebClient webClient = new WebClien ...

  4. JAVA 通过url下载图片保存到本地

    //java 通过url下载图片保存到本地 public static void download(String urlString, int i) throws Exception { // 构造U ...

  5. android下载网络图片并缓存

    异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...

  6. h5+的Downloader下载网络图片缓存到本地的案例

    之前展示图片都是通过<img src="网络图片地址"> , 每次都请求服务器, 加载比较慢;如何做到显示图片的时候先从本地获取,没有则联网下载,缓存到本地;下次直接从 ...

  7. android 下载网络图片并缓存

    异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...

  8. java后台中处理图片辅助类汇总(上传图片到服务器,从服务器下载图片保存到本地,缩放图片,copy图片,往图片添加水印图片或者文字,生成二维码,删除图片等)

    最近工作中处理小程序宝箱活动,需要java画海报,所以把这块都快百度遍了,记录一下处理的方法,百度博客上面也有不少坑! 获取本地图片路径: String bgPath = Thread.current ...

  9. android下载网络图片,设置宽高,等比缩放

    使用Picasso组件去下载图片会发现图片宽高会变形不受等比缩放控制,即使设置了图片的 scaleType,可能是对Picasso的api没有用对, Picasso.with(this.activit ...

随机推荐

  1. 导致VC不能释放的几个原因

    delegate的属性不是weak NSTimer没有invalidate block中的强引用 调用了performSelector,退出时没有cancelPerformSelectorsWithT ...

  2. windows7 下伪静态配置方法

    今天终于算是彻底知道windows7下伪静态的IIS配置了.尼玛真坑爹,竟然64位的和32位的配置竟然不一样... 网上找的比较详细的文章地址: http://jingyan.baidu.com/ar ...

  3. (翻译) TFS源代码控制的未来 (TFSVC vs. Git)

    说明:由于博客园的限制,之前转发的MVP卢建晖的文章不能放入首页,但我会继续转发,感兴趣的同学请到我的博客首页查看. 博主: 翻译自微软Visual Studio ALM产品组老大Brian Harr ...

  4. 面试问题-使用Java线程做数学运算

    这是一个展示如何使用join()方法的例子. 问题: 使用Java多线程计算表达式1*2/(1+2)的值. 解决方案: 使用一个线程做加法运算,另一个线程做乘法运算,还有一个主线程main做除法运算. ...

  5. ArrayList

    各种原因,前两年做C语言去了,现在重新做JAVA, 感觉自己基础很不扎实,要好好学习啦, 先从简单的开始~ 以下内容基于jdk1.7.0_79源码: 什么是ArrayList 可以简单的认为是一个动态 ...

  6. substring -----截取字符串

    var str = "0123456789"; substring alert(str.substring(0));------------"0123456789&quo ...

  7. 【转发】网易邮箱前端技术分享之javascript编码规范

    网易邮箱前端技术分享之javascript编码规范 发布日期:2013-11-26 10:06 来源:网易邮箱前端技术中心 作者:网易邮箱 点击:533 网易邮箱是国内最早使用ajax技术的邮箱.早在 ...

  8. EF深入系列--细节

    1.在调试的时候,查看EF生成的SQL语句 在Context类的构造函数中添加以下代码,就可以在调试的时候在[输出]窗口中看到SQL语句 this.Database.Log = s => Sys ...

  9. Python类属性的延迟计算

    所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算. 优点 构造一个延迟计算属性的主要目的是为了提升性能 实现 ...

  10. head,tail

    测试文件headtail 1 L 2 L 3 L 4 L 5 L 6 L 7 L 8 L 9 L 10 L 11 L 12 L 13 L 14 L 15 L 16 L 17 L 18 L 19 L h ...