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 ,如需转载请自行联系原作者
相关文章
|
1月前
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin协程优化网络请求处理
【2月更文挑战第30天】 在移动应用开发领域,网络请求的处理是影响用户体验的关键环节。针对Android平台,利用Kotlin协程能够极大提升异步任务处理的效率和简洁性。本文将探讨如何通过Kotlin协程优化Android应用中的网络请求处理流程,包括协程的基本概念、网络请求的异步执行以及错误处理等方面,旨在帮助开发者构建更加流畅和响应迅速的Android应用。
|
3月前
|
安全 API Android开发
Android网络和数据交互: 解释Retrofit库的作用。
Android网络和数据交互: 解释Retrofit库的作用。
39 0
|
3月前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
22 0
|
3天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
10天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
10 0
|
10天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
10 0
|
24天前
|
Android开发
Android保存图片到相册(适配android 10以下及以上)
Android保存图片到相册(适配android 10以下及以上)
22 1
|
1月前
|
Shell 开发工具 Android开发
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
ADB 下载、安装及使用教程:让你更好地管理 Android 设备
513 2
|
1月前
|
Android开发 对象存储
OSS对象储存android开发进行下载到本地文件时异步操作失效
android vivo80使用官方示例代码进行文件下载,但是使用oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>()时onSuccess和onFailure不执行
|
1月前
|
数据采集 Web App开发 数据处理
Ruby网络爬虫教程:从入门到精通下载图片
Ruby网络爬虫教程:从入门到精通下载图片