1. 程式人生 > >從網路中獲取載入一個圖片

從網路中獲取載入一個圖片


import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class ImageActivity extends Activity {
	private ImageView Iv;
	private Button btn;
	//定義thread以及返回的id
	private final int SUCCESS=0;
	private final int FAILED=1;
	//網路獲取圖片的地址
	private final String url="http://d.3987.com/htfss_140227/004.jpg";
	//網路獲取圖片的bitmap物件
	private Bitmap bit=null;
	//定義handler物件
	private Handler handler=new Handler(){
		//實現當handler接收到message資訊的回撥函式
		public void handleMessage(Message msg){
			super.handleMessage(msg);
			switch (msg.what) {
			case SUCCESS:
				Toast.makeText(ImageActivity.this, "圖片載入成功", Toast.LENGTH_SHORT).show();
				Iv.setImageBitmap(bit);
				break;

			case FAILED:
				Toast.makeText(ImageActivity.this, "圖片載入失敗", Toast.LENGTH_SHORT).show();
				break;
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_image);
		Iv=(ImageView) findViewById(R.id.Iv);
		btn=(Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				setImage();
			}
		});
	}

	public void setImage(){
		//判斷網路是否暢通
		if(isOpenNetwork()){
			new Thread(){
				public void run() {
					super.run();
					//請求網路圖片
					try {
						bit=getRemoteImage(new URL(url));
					} catch (MalformedURLException e) {
						e.printStackTrace();
					}
					//根據載入的網路圖片,返回不同的message物件
					if(bit !=null){
						Message msg=new Message();
						msg.what=SUCCESS;
						//給handler傳送message資訊物件
						handler.sendMessage(msg);
					}else{
						Message msg=new Message();
						msg.what=FAILED;
						handler.sendMessage(msg);
					}
				};
			}.start();
		}
	}
	//根據傳入的url物件,請求網路圖片
	public Bitmap getRemoteImage(final URL aURL){
		//建立連結
		try {
			final URLConnection conn=aURL.openConnection();
			conn.connect();
			//從url連結讀取圖片流
			final BufferedInputStream bis=new BufferedInputStream(conn.getInputStream());
			//從圖片流中得到圖片
			final Bitmap bm=BitmapFactory.decodeStream(bis);
			//關閉圖片流
			bis.close();
			return bm;
		} catch (IOException e) {
			Log.d("DEBUGTAG", "Oh noooz an error...");
		}
		
		return null;		
	}
	//判斷網路狀態是否正常
	private boolean isOpenNetwork(){
		//得到系統的網路連結服務
		ConnectivityManager connManager=(ConnectivityManager) getSystemService(
						Context.CONNECTIVITY_SERVICE);
		//判斷網路是否可以連結
		if(connManager.getActiveNetworkInfo() !=null){
			return connManager.getActiveNetworkInfo().isAvailable();
		}
		return false;
	}
}