1. 程式人生 > >Android之網路圖片載入的5種基本方式

Android之網路圖片載入的5種基本方式

學了這麼久,最近有空把自己用到過的網路載入圖片的方式總結了出來,與大家共享,希望對你們有幫助。

此部落格包含Android 5種基本的載入網路圖片方式,包括普通載入HttpURLConnection、HttpClients、Volley、XUtils、OkHttp等網路載入圖片。

其他網路圖片載入方式,後續補上。

效果如下圖:

         

HttpURLConnection方式:

public Bitmap getImageBitmap(String url) {
		URL imgUrl = null;
		Bitmap bitmap = null;
		try {
			imgUrl = new URL(url);
			HttpURLConnection conn = (HttpURLConnection) imgUrl
					.openConnection();
			conn.setDoInput(true);
			conn.connect();
			InputStream is = conn.getInputStream();
			bitmap = BitmapFactory.decodeStream(is);
			is.close();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return bitmap;
}

HttpClient方式
public Bitmap getImageBitmap(String url) {
		DefaultHttpClient httpclient = new DefaultHttpClient();
		HttpGet httpget = new HttpGet(url);
		try {
			HttpResponse resp = httpclient.execute(httpget);
			// 判斷是否正確執行
			if (HttpStatus.SC_OK == resp.getStatusLine().getStatusCode()) {
				// 將返回內容轉換為bitmap
				HttpEntity entity = resp.getEntity();
				InputStream in = entity.getContent();
				Bitmap mBitmap = BitmapFactory.decodeStream(in);
				// 向handler傳送訊息,執行顯示圖片操作
				return mBitmap;
			}

		} catch (Exception e) {
		} finally {
			httpclient.getConnectionManager().shutdown();
		}

		return null;
}

 XUtils方式
private void initView() {
	// TODO Auto-generated method stub
	BitmapUtils bitmapUtils = new BitmapUtils(this);
	// 載入網路圖片
	bitmapUtils.display(imageView,
			"http://img.my.csdn.net/uploads/201407/26/1406383290_9329.jpg");

	// 載入本地圖片(路徑以/開頭, 絕對路徑)
	// bitmapUtils.display(imageView, "/sdcard/test.jpg");

	// 載入assets中的圖片(路徑以assets開頭)
	// bitmapUtils.display(imageView, "assets/img/wallpaper.jpg");

  }

OkHttp方式
  private void setIamge()
    {
    	String url = "http://img.my.csdn.net/uploads/201407/26/1406383291_8239.jpg";
    	OkHttpUtils.get().url(url).tag(this)
    			.build()
    			.connTimeOut(20000).readTimeOut(20000).writeTimeOut(20000)
    			.execute(new BitmapCallback() {
    			@Override
    			public void onError(Call call, Exception e, int id) {
    				}

    			@Override
    			public void onResponse(Bitmap bitmap, int id) {
    					imageView.setImageBitmap(bitmap);
    				}
    			});
    }

Volley方式

 /***
	 * ImageRequest載入圖片
	 */
 public void setImg1()
 {
		
		
	ImageRequest request = new ImageRequest(VolleySingleton.imageThumbUrls[0],
		 new Response.Listener<Bitmap>() {
		 @Override
		 public void onResponse(Bitmap bitmap) {
		        imageview1.setImageBitmap(bitmap);
		       }
		 }, 0, 0, Config.RGB_565,
		 new Response.ErrorListener() {
		     public void onErrorResponse(VolleyError error) {
		        imageview1.setImageResource(R.mipmap.ic_launcher);
		      }
	});
      VolleySingleton.getVolleySingleton(this.getApplicationContext()).addToRequestQueue(request);
	}
	/***
	 * 使用 ImageLoader 載入圖片
	 */
	
	public void setImg2()
	{
		com.android.volley.toolbox.ImageLoader mImageLoader;
		mImageLoader =   VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();
		mImageLoader.get(VolleySingleton.imageThumbUrls[1], 
				//mImageView是ImageView例項
				//第2個引數:預設圖片
				//第2個引數:載入圖片錯誤時的圖片
		com.android.volley.toolbox.ImageLoader.getImageListener(imageview2,R.mipmap.ic_launcher, R.mipmap.ic_launcher));
	}
	/**
	 * 使用NetworkImageView載入圖片
	 */
	public void setImg3()
	{
		com.android.volley.toolbox.ImageLoader mImageLoader;
		mImageLoader = VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();
		networkImageView.setImageUrl(VolleySingleton.imageThumbUrls[2], mImageLoader);
	}

結語:

       這五種網路圖片載入是基本的,瞭解會使用就行了;

       其他網路圖片載入方式,請看