參看書本內容之後,自己總結的幾點。
1、建立一個URL對象;
2、通過調用URL對象的openConnection()方法返回一個URLConnection對象
3、利用URLConnection對象擷取輸入資料流對象InputStream
4、從輸入資料流中讀取資料
以下以讀取百度伺服器首頁內容為例,說明一下Android中利用Http通訊的一般過程。
首先介面布局如下所示
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/Btn_Commit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ConnectingServer"/> <TextView android:id="@+id/TextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="顯示擷取到的伺服器資訊"/> </LinearLayout></ScrollView>
java原始碼如下:
package com.android.www;import java.io.DataInputStream;import java.io.IOException;import java.net.URL;import java.net.URLConnection;import org.apache.http.util.ByteArrayBuffer;import org.apache.http.util.EncodingUtils;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.TextView;public class TestUrl extends Activity {private Button button;private TextView textView;private final String ADDRESS="http://www.baidu.com";private URLConnection urlConnect;private URL url; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_testurl); button=(Button)findViewById(R.id.Btn_Commit); textView=(TextView)findViewById(R.id.TextView); button.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubDataInputStream dis=null;if(v==button){try{//1、建立一個URL對象url=new URL(ADDRESS);//2、通過調用URL對象的openConnection()方法返回一個URLConnection對象urlConnect=url.openConnection();//3、利用URLConnection對象擷取輸入資料流對象InputStreamdis=new DataInputStream(urlConnect.getInputStream());int temp=0;ByteArrayBuffer baff=new ByteArrayBuffer(1000);//4、從輸入資料流中讀取資料while((temp=dis.read())!=-1){baff.append(temp);}textView.setText(EncodingUtils.getString(baff.toByteArray(), "UFT-8"));}catch(Exception e){e.printStackTrace();}finally{try{if(dis!=null)dis.close();}catch(IOException e){e.printStackTrace();}}}}}); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_testurl, menu); return true; }}
然後在AndroidManifest.xml中添加訪問網路的許可權
<uses-permission android:name="android.permission.INTERNET"/>
效果如: