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 ,如需转载请自行联系原作者
相关文章
|
5月前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
336 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
3月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
40 3
|
3月前
|
Java 程序员 开发工具
Android|修复阿里云播放器下载不回调的问题
虽然 GC 带来了很多便利,但在实际编码时,我们也需要注意对象的生命周期管理,该存活的存活,该释放的释放,避免因为 GC 导致的问题。
50 2
|
4月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
84 20
Android经典面试题之图片Bitmap怎么做优化
|
5月前
|
API 开发工具 Android开发
Android源码下载
Android源码下载
640 0
|
5月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
729 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
5月前
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
175 0
|
5月前
|
安全 网络安全 Android开发
探索安卓开发之旅:从新手到专家网络安全与信息安全:防范网络威胁,保护数据安全
【8月更文挑战第29天】在这篇技术性文章中,我们将踏上一段激动人心的旅程,探索安卓开发的世界。无论你是刚开始接触编程的新手,还是希望提升技能的资深开发者,这篇文章都将为你提供宝贵的知识和指导。我们将从基础概念入手,逐步深入到安卓开发的高级主题,包括UI设计、数据存储、网络通信等方面。通过阅读本文,你将获得一个全面的安卓开发知识体系,并学会如何将这些知识应用到实际项目中。让我们一起开启这段探索之旅吧!
|
5月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
299 0

热门文章

最新文章