Welcome to

Vcode

首页 / Android / 安卓图片文件下载

安卓图片文件下载

1.两种方法对网络上的图片进行显示,第一种,先保存下来,保存在byte[]数组,第二种,直接对输入流操作。

package com.example.demoa;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

import android.os.Environment;
import android.os.Handler;
import android.widget.ImageView;

public class HttpThread  extends Thread{
	private String url;
	private Handler hand1;
	private ImageView image;
	private FileOutputStream fout;
	private Bitmap bm;
	private File downloadImg;
	public HttpThread(String url,Handler hand,ImageView image){
		
		this.url=url;
		this.hand1=hand;
		this.image=image;
		
	}
	
	public void run(){
		try {
			URL httpurl=new URL(url);
			HttpURLConnection conn=(HttpURLConnection) httpurl.openConnection();
			conn.setReadTimeout(5000);
			conn.setRequestMethod("GET");
			
			
			conn.setDoInput(true);
			InputStream ins=conn.getInputStream(); //最后记得关闭
			
			
			//第一种方法
			String fileName=String.valueOf(System.currentTimeMillis())+".bmp"; //文件名
			if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))//获取sd卡的状态,看看是否正常挂载
			{
				downloadImg=new File(Environment.getExternalStorageDirectory().getPath(),fileName);
				//File类主要是文件对象的创建,具体请看菜鸟教程http://www.runoob.com/java/java-file.html
			}
			else
			{
				//
			}
			
			
			byte[] b=new byte[40*1024]; //根据文件大小适配。
			//如果文件大小过于大,可以用多个字节数组进行缓存文件
			
			int lenths;
			fout=new FileOutputStream(downloadImg);
			while((lenths=ins.read(b))!=-1)
			{
				fout.write(b);//写入
			}
			bm=BitmapFactory.decodeFile(downloadImg.getAbsolutePath());//位图工厂
			
			//第二种方法,输入流直接显示
			
			//bm=BitmapFactory.decodeStream(ins);
			
			//显示
			hand1.post(new Runnable() {
				
				@Override
				public void run() {
					// TODO Auto-generated method stub
					image.setImageBitmap(bm);//显示
				}
			});
			
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

2.启动,如果采用第一种方法的话,图片一般保存在根目录下。

public class MainActivity extends ActionBarActivity {
	
	private Button b1;
	private ImageView iv;
	private Handler handler=new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1=(Button) findViewById(R.id.button1);
        iv=(ImageView) findViewById(R.id.imageView1);
        b1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				String url="http://img1.gamedog.cn/2015/07/07/303-150FFU5050.jpg";
				new HttpThread(url, handler, iv).start();
			}
		});
    }


本文暂无评论

发表评论

您的电子邮件地址不会被发布。

>> <<