Android 使用URL顯示網狀圖片
URL對象中前而幾個方法都非常容易理解,而該對象提供的openStream()可以讀取該 URL資源的InputStream,通過該方法可以非常方便地讀取遠端資源。
下面的程式示範如何通過URL類讀取遠端資源:
1)只顯示網狀圖片
2)顯示並下載網狀圖片
1)只顯示網狀圖片
a) activity_main.xml
b)MainActivity.java
package dujun.king.urlgetimage;import java.io.InputStream;import java.net.URL;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.MenuItem;import android.widget.ImageView;public class MainActivity extends Activity {Bitmap bitmap; ImageView imageview; Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what==0x9527) { //顯示從網上下載的圖片 imageview.setImageBitmap(bitmap); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageview=(ImageView)findViewById(R.id.imageView1); //建立並啟動一個新線程用於從網路上下載圖片 new Thread(){ @Override public void run() { try { //建立一個url對象 URL url=new URL(http://www.baidu.com/img/bdlogo.png); //開啟URL對應的資源輸入資料流 InputStream is= url.openStream(); //從InputStream流中解析出圖片 bitmap = BitmapFactory.decodeStream(is); // imageview.setImageBitmap(bitmap); //發送訊息,通知UI組件顯示圖片 handler.sendEmptyMessage(0x9527); //關閉輸入資料流 is.close(); } catch (Exception e) { e.printStackTrace(); } } }.start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}c)AndroidMainifest.xml
2)如果我們要顯示並下載網狀圖片,只需要將MainActivity.java檔案修改如下:
package dujun.king.urlgetimage;import java.io.InputStream;import java.io.OutputStream;import java.net.URL;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.MenuItem;import android.widget.ImageView;public class MainActivity extends Activity {Bitmap bitmap; ImageView imageview; Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what==0x9527) { //顯示從網上下載的圖片 imageview.setImageBitmap(bitmap); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageview=(ImageView)findViewById(R.id.imageView1); //建立並啟動一個新線程用於從網路上下載圖片 //這裡必須新起一個線程,Android後面的版本中,不允許在主線程中連網 new Thread(){ @Override public void run() { try { //建立一個url對象 URL url=new URL(http://www.baidu.com/img/bdlogo.png); //開啟URL對應的資源輸入資料流 InputStream is= url.openStream(); //從InputStream流中解析出圖片 bitmap = BitmapFactory.decodeStream(is); // imageview.setImageBitmap(bitmap); //發送訊息,通知UI組件顯示圖片 handler.sendEmptyMessage(0x9527); //關閉輸入資料流 is.close(); //------------------------------ //下載網狀圖片 //再次開啟資源流 is = url.openStream(); //開啟手機對應的輸出資料流 //存放在手機中,並命名為baidulogo.png OutputStream os = openFileOutput(baidulogo.png, MODE_WORLD_READABLE); byte[] buff = new byte[1024]; int len = 0; //因為網路下載一般不可能一次下載完畢,我們將每次下載好的有效資料寫入 while ((len = is.read(buff)) > 0) { os.write(buff,0,len); } //關閉流 is.close(); os.close(); } catch (Exception e) { e.printStackTrace(); } } }.start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
參考文獻:瘋狂Android講義(第2版) 李剛編著
原文地址:http://blog.csdn.net/qingdujun/article/details/39271479