Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android網絡圖片顯示在ImageView 上面

Android網絡圖片顯示在ImageView 上面

編輯:關於Android編程

在寫這篇博文的時候,我參與了一個項目的開發,裡面涉及了很多網絡調用相關的問題,我記得我在剛剛開始做android項目的時候,曾經就遇到這個問題,當時在網上搜索了一下,發現了一篇博文,現在與大家分享一下,http://www.open-open.com/lib/view/open1376128628881.html

其實這篇文章的思想是有問題的,因為網絡是需要不斷的輪詢訪問的,所以必須要放在線程中,而不應該直接放在onCreate方法中,我對這段程序進行了一定的修改,將它們放在線程中更新就可以了。

這個事MainActivity.java的代碼:

package com.test.picture;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private ImageView imageView;
	private String picturePath = "http://content.52pk.com/files/100623/2230_102437_1_lit.jpg";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				final Bitmap bitmap = returnBitMap(picturePath);
				imageView.post(new Runnable() {

					@Override
					public void run() {
						// TODO Auto-generated method stub
						imageView.setImageBitmap(bitmap);
					}
				});
			}
		}).start();
	}

	private Bitmap returnBitMap(String url) {
		URL myFileUrl = null;
		Bitmap bitmap = null;
		try {
			myFileUrl = new URL(url);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		try {
			HttpURLConnection conn = (HttpURLConnection) myFileUrl
					.openConnection();
			conn.setDoInput(true);
			conn.connect();
			InputStream is = conn.getInputStream();
			bitmap = BitmapFactory.decodeStream(is);
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return bitmap;
	}

	private void initView() {
		imageView = (ImageView) findViewById(R.id.picture);
	}
}

這是布局文件的代碼:



    


當然我們也要在AndroidManifest.xml中添加相應的網絡權限。


我們在MainActivity.java中的onCreate方法中創建了一個新的線程,但是我們也明白不可以在非UI線程中操作用戶界面,那麼我們不可以直接在新的線程中操作UI,所以我們還要將改變post到UI線程中去。

上面的方法運行時沒有問題的,謝謝大家。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved