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 ,如需转载请自行联系原作者
相关文章
|
7月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
208 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
2月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
149 4
|
2月前
|
存储 人工智能 文字识别
三款安卓手机word编辑器下载,Microsoft Word,wps office,Word手机版,手机word编辑查看阅读器,PDF转换器apk下载
WPS Office是一款功能强大的办公软件,支持文档编辑、表格处理和演示文稿制作,兼容多种格式并提供丰富的云服务。它具备低内存占用、快速运行的特点,支持跨设备同步与多人协作,内置海量模板及AI辅助功能,如智能写作和PPT自动生成。此外,还可扫描文件、编辑PDF并转换为其他格式,极大提升办公效率,适合手机用户便捷操作。
187 1
|
4月前
|
XML Android开发 数据格式
Android利用selector(选择器)实现图片动态点击效果
本文介绍了Android中ImageView的`src`与`background`属性的区别及应用,重点讲解如何通过设置背景选择器实现图片点击动态效果。`src`用于显示原图大小,不拉伸;`background`可随组件尺寸拉伸。通过创建`selector_setting.xml`,结合`setting_press.xml`和`setting_normal.xml`定义按下和正常状态的背景样式,提升用户体验。示例代码展示了具体实现步骤,包括XML配置和形状定义。
202 3
Android利用selector(选择器)实现图片动态点击效果
|
4月前
|
Java Android开发
Android图片的手动放大缩小
本文介绍了通过缩放因子实现图片放大缩小的功能,效果如动图所示。关键步骤包括:1) 在布局文件中设置 `android:scaleType=&quot;matrix&quot;`;2) 实例化控件并用 `ScaleGestureDetector` 处理缩放手势;3) 使用 `Matrix` 对图片进行缩放处理。为避免内存崩溃,可在全局配置添加 `android:largeHeap=&quot;true&quot;`。代码中定义了 `beforeScale` 和 `nowScale` 变量控制缩放范围,确保流畅体验。
151 8
|
6月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1224 77
|
4月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
163 1
|
6月前
|
API 数据处理 Android开发
Android网络请求演变:从Retrofit到Flow的转变过程。
通过这个比喻,我们解释了 Android 网络请求从 Retrofit 到 Flow 的转变过程。这不仅是技术升级的体现,更是反映出开发者在面对并发编程问题时,持续探索和迭求更好地解决方案的精神。未来,还会有更多新的技术和工具出现,我们期待一同 witness 这一切的发展。
191 36
|
4月前
|
Web App开发 缓存 JavaScript
Android网络小说阅读器的实现
小说阅读Demo,。此Demo使用Jsoup解析HTML,实现小说数据抓取(数据源自网络),并包含自定义View、六章小说缓存等功能,但未实现下载。项目还包括屏幕适配、字体设置等,借助第三方框架完成优化。以下是主页、详情页、阅读页等界面展示。
|
6月前
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
223 12

热门文章

最新文章