欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 下载网络图片保存到本地

程序员文章站 2022-05-13 23:29:12
通过网络地址获取网络图片,点击下载将图片显示出来,然后点击图片将图片保存到本地。 首先需要在manifest上添加一些权限: package com.xjw.test;...

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

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






package com.xjw.test;

import java.io.file;
import java.io.fileoutputstream;
import java.io.inputstream;
import java.net.httpurlconnection;
import java.net.url;
import android.os.asynctask;
import android.os.bundle;
import android.os.environment;
import android.os.handler;
import android.os.message;
import android.app.activity;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.imageview;
import android.widget.toast;

public class mainactivity extends activity implements onclicklistener{

	button content;
	imageview image;
	bitmap bitmap;
	protected void oncreate(bundle savedinstancestate) {
		super.oncreate(savedinstancestate);
		setcontentview(r.layout.activity_main);
		content=(button)findviewbyid(r.id.content);
		image=(imageview)findviewbyid(r.id.image);
		
		content.setonclicklistener(this);;
		image.setonclicklistener(this);;
	}
	
	/**
	 * 获取网络图片
	 * @param imageurl 图片网络地址
	 * @return bitmap 返回位图
	 */
	public bitmap getimageinputstream(string imageurl){
		url url;
		httpurlconnection connection=null;
		bitmap bitmap=null;
		try {
			url = new url(imageurl);
			connection=(httpurlconnection)url.openconnection();
			connection.setconnecttimeout(6000); //超时设置
			connection.setdoinput(true); 
			connection.setusecaches(false); //设置不使用缓存
			inputstream inputstream=connection.getinputstream();
			bitmap=bitmapfactory.decodestream(inputstream);
			inputstream.close();
		} catch (exception e) {
			e.printstacktrace();
		}
		return bitmap;
	}
	
	public void onclick(view v) {
		switch (v.getid()) {
		case r.id.content:
			//加入网络图片地址
			new task().execute("https://pic.4j4j.cn/upload/pic/20130617/55695c3c95.jpg");
			break;
			
		case r.id.image:
			//点击图片后将图片保存到sd卡跟目录下的test文件夹内
			savaimage(bitmap, environment.getexternalstoragedirectory().getpath()+"/test");
			toast.maketext(getbasecontext(), "图片保存", toast.length_short).show();
			break;
			
		default:
			break;
		}
	}
	
	handler handler=new handler(){
		public void handlemessage(android.os.message msg) {
			if(msg.what==0x123){
				image.setimagebitmap(bitmap);
			}
		};
	};
	
	
	/**
	 * 异步线程下载图片
	 *
	 */
	class task extends asynctask{

		protected void doinbackground(string... params) {
			bitmap=getimageinputstream((string)params[0]);
			return null;
		}
		
		protected void onpostexecute(void result) {
			super.onpostexecute(result);
			message message=new message();
			message.what=0x123;
			handler.sendmessage(message);
		}
		
	}
	
	/**
	 * 保存位图到本地
	 * @param bitmap
	 * @param path 本地路径
	 * @return void
	 */
	public void savaimage(bitmap bitmap, string path){
		file file=new file(path);
		fileoutputstream fileoutputstream=null;
		//文件夹不存在,则创建它
		if(!file.exists()){
			file.mkdir();
		}
		try {
			fileoutputstream=new fileoutputstream(path+"/"+system.currenttimemillis()+".png");
			bitmap.compress(bitmap.compressformat.jpeg, 100,fileoutputstream);
			fileoutputstream.close();
		} catch (exception e) {
			e.printstacktrace();
		}
	}
}