招生熱線
0755-86191118 0755-86191118
我的位置: 首頁 > 學習專區 > 安卓技術 > Android制作一個可以獲取網絡圖片的程序

Android制作一個可以獲取網絡圖片的程序

2012-02-19 11:29:00
來源:
[導讀] 在main xml上,我們需要放入ImageView、Button、EditText這樣三個控件,到時候,我們點擊按鈕的時候就可以從editText中獲取剛才我們獲取的

在main.xml上,我們需要放入ImageView、Button、EditText這樣三個控件,到時候,我們點擊按鈕的時候就可以從editText中獲取剛才我們獲取的地址字符串,并通過一系列操作獲取圖片數據,再通過ImageView的setImageBitmap(bitmap)方法在界面上把圖片顯示出來。以下是詳細代碼,我一行一行給大家解讀一下

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

public class GetNetImageActivity extends Activity { //聲明三個控件

private TextView address;

private Button show;

private ImageView pic;

String path=”http://images.chinagate.cn/attachement/jpg/site1020/20100313/000cf1a487860d0567ba40.jpg”;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//實例化三個控件

address=(TextView)findViewById(R.id.textview);

show=(Button)findViewById(R.id.showImage);

pic=(ImageView)findViewById(R.id.iamgeview);

//設置button的點擊事件,一點擊就可以看到圖片

show.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {

try{ //顯示出圖片需要位圖對象,即星號表明的這一行,而位圖對象需要用圖片數據來生成,而這個數據的獲得就是下面那個方法所指出的。

byte[] data =GetNetImageActivity.this. getData();

* Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

pic.setImageBitmap(bitmap);

}catch(Exception e){}

}

});

}//這個方法用于獲得圖片的二進制數據

private byte[] getData() throws Exception {//這個path就是我們的那張圖片的網絡地址,URL就像是我們使用瀏覽器時候的那個地址欄對象,他包裝了網址對象。

URL url = new URL(path);//調用URL對象的.openConnection() 返回一個HttpURLConnection 對象http

HttpURLConnection http = (HttpURLConnection) url.openConnection();//設置訪問延時時間秒數,一般要在5秒以內。否則程序可能會出現錯誤

http.setConnectTimeout(3000);//設置請求的方法,我們可以用GET方法,也可以用POST方法

http.setRequestMethod(“GET”); //調用http的關鍵方法:getInputStream(),這個getInputStream()方法用來獲取網絡資源文件的流對象,比如我們現在做的實驗室獲取圖片,那么getInputStream()方法就給我們圖片數據流

InputStream in = http.getInputStream();//我們剛才獲得了圖片數據流,還不能馬上轉化成我們要顯示的圖片,而是需要進行轉換,這個轉換方法封裝在getDta()這個方法里面,這個getData()方法需要我們傳入InputStream對象,并返回一個byte[] 對象,我們接下來看看這個getData()方法

byte[] b = GetNetImageActivity.this. getByte(in);

return b;

}

public byte[] getByte(InputStream i ) throws IOException{//字節數組輸出流,這個流就是起到緩沖的作用,

ByteArrayOutputStream out = new ByteArrayOutputStream();//構造一個字節數組,這個字節數組的大小是1024個字節,用于讓輸入流讀取數據到其中 byte[] buffer = new byte[1024];//這個len起到監督貨物有沒有搬運完的作用。如果沒有搬運完,則len不會小于0,否則等于-1,當等于-1的時候,就表達貨物搬運完成

int len = 0;//i.read()方法表示把流讀到字節數組中,返回的是讀取到的內容的長度,在這個while里面我們判斷len的數值大小,當len不小于0的時候,我們就一直搬運貨物,直到小于0我們才不搬

while((len=i.read(buffer))!=-1){//在一邊讀的時候,我們就一邊寫,即調用輸出流的write()方法,把數據讀到內存里面,讀多少,寫多少,意思是每次搬運buffer這樣容量的貨物。

out.write(buffer,0,len);

}

i.close();

return out.toByteArray();

}

}

評論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
亚洲欧美中文日韩二区一区 | 日本亚洲欧美在线视观看在线观看 | 日本中文字幕乱码系列 | 亚洲精品成人AV在线导航 | 五月亚洲国产婷婷 | 亚洲第一视频在线观看播放 |