http://bbs.125.la/forum.php?mod=viewthread&tid=13979320&highlight=
1. Terminal Fuction:
Simulate the process of registation:
? ? ? ? 用戶點(diǎn)擊注冊按鈕后,客戶端會通過HTTP協(xié)議向服務(wù)器發(fā)送POST請求/GET請求并傳送數(shù)據(jù)设捐,服務(wù)器獲得數(shù)據(jù)后進(jìn)行相關(guān)數(shù)據(jù)庫處理险掀,然后服務(wù)器再將處理的結(jié)果作為響應(yīng)返回給客戶端益老,客戶端根據(jù)獲得的響應(yīng)信息繼續(xù)處理業(yè)務(wù)邏輯崩侠。
2. Program Structure:
(1)LoginActivity.java:客戶端界面(UI),在子線程內(nèi)通過消息機(jī)制完成向服務(wù)器發(fā)送請求,接收并處理響應(yīng)信息;
(2)personalActivity.java:用戶界面(UI)落竹,當(dāng)用戶注冊成功后(即HTTP通信成功)务嫡,客戶端跳轉(zhuǎn)至該界面;
(3)LoginToSever.java:客戶端與服務(wù)器通信的實(shí)際實(shí)現(xiàn)類,包括發(fā)送請求钥星、獲取響應(yīng)信息;
3. APP realize:
(1)LoginActivity.java:客戶端界面沾瓦,在子線程內(nèi)通過消息機(jī)制完成向服務(wù)器發(fā)送請求,接收并處理響應(yīng)信息;
(2)personalActivity.java:用戶界面(UI)缕探,當(dāng)用戶注冊成功后(即HTTP通信成功),客戶端跳轉(zhuǎn)至該界面;
- package?com.example.http_client;??
- ??
- import?android.app.Activity;??
- import?android.os.Bundle;??
- ??
- public?class?personalActivity?extends?Activity?{??
- ??
- ????@Override??
- ????protected?void?onCreate(Bundle?savedInstanceState)?{??
- ????????super.onCreate(savedInstanceState);??
- ????????setContentView(R.layout.personal);??
- ????}??
- ??????
- }?
(3)LoginToSever.java:(POST請求)客戶端與服務(wù)器通信的實(shí)際實(shí)現(xiàn)類还蹲,包括發(fā)送請求爹耗、獲取響應(yīng)信息;
- package?com.example.http_client; ?
- import?java.io.BufferedReader;??
- import?java.io.IOException;??
- import?java.io.InputStream;??
- import?java.io.InputStreamReader;??
- import?java.io.UnsupportedEncodingException;??
- import?java.util.ArrayList;??
- import?java.util.List; ???
- import?org.apache.http.HttpEntity;??
- import?org.apache.http.HttpResponse;??
- import?org.apache.http.HttpStatus;??
- import?org.apache.http.NameValuePair;??
- import?org.apache.http.client.ClientProtocolException;??
- import?org.apache.http.client.HttpClient;??
- import?org.apache.http.client.entity.UrlEncodedFormEntity;??
- import?org.apache.http.client.methods.HttpPost;??
- import?org.apache.http.impl.client.DefaultHttpClient;??
- import?org.apache.http.message.BasicNameValuePair;??
- ??
- public?class?LoginToServer?{??
- ????private?String?url="http://10.0.2.2:8080/login/LoginServlet"; ? ?//訪問服務(wù)器資源的URL地址??
- //??private?String?url="http://localhost:8080/login/LoginServlet";??
- ????String?result="";?????????
- ??????
- ????/*doPost方法:?
- ?????*??作用:實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送POST請求*/??
- ????public?String?doPost(String?name,String?psd)????
- ????{??
- ????????HttpClient?hc=new?DefaultHttpClient();??????????????????????//a.創(chuàng)建HttpClient對象??
- ????????HttpPost?httpPost=new?HttpPost(url);????????????????????????????????//b.根據(jù)URL地址創(chuàng)建HttpPost對象??
- ????????NameValuePair?param1=?new?BasicNameValuePair("username",name);??
- ????????NameValuePair?param2=new?BasicNameValuePair("psd",psd);??
- ????//??System.out.println("username="+name+"psd="+psd);??
- ????????List<NameValuePair>?params?=?new?ArrayList<NameValuePair>();??????
- ????????params.add(param1);??
- ????????params.add(param2);?//c.創(chuàng)建參數(shù)列表,每個參數(shù)以鍵值對的形式且保存在NameValuePair中??????????????
- ????????HttpEntity??he;??
- ??????try?{??
- ????????????he?=?new?UrlEncodedFormEntity(params,"GBK");???//d.根據(jù)參數(shù)創(chuàng)建HttpEntity對象??
- ????????????httpPost.setEntity(he);????????????????????????//e.將HttpEntity對象賦給HttpPost對象??
- ????????????HttpResponse?response?=?hc.execute(httpPost);??//f.執(zhí)行HttpClient的execute()方法獲取HttpResponse對象??????????
- ????????????if(response.getStatusLine().getStatusCode()?==?HttpStatus.SC_OK)??
- ????????????{??
- ????????????????????HttpEntity?het?=?response.getEntity();?//g.執(zhí)行HttpResponse的getEntity方法谜喊,獲取HttpEntity對象??
- ????????????????????InputStream?is=?het.getContent();?//h.執(zhí)行HttpEntity的getContent方法潭兽,獲取對應(yīng)的輸入流??
- ????????????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(is));
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //i.讀取輸入流中的內(nèi)容,并以字符串的形式返回????????
- ????????????????????String?readLine?=?null;??
- ????????????????????while((readLine?=?br.readLine())?!=?null?)??
- ????????????????????{??
- ????????????????????????????result=result+readLine;??
- ????????????????????}??
- ????????????????????is.close();??
- ????????????}??
- ????????????else??
- ????????????{??
- ????????????????result="error";??
- ????????????}??
- ????????}?catch?(IOException?e)?{??
- ????????????e.printStackTrace();??
- ????//??????System.out.println(e.getMessage());?//調(diào)試:打印異常日志??
- ????????????result="Exception";??
- ????????}??
- ??
- ????????return?result;//返回服務(wù)器響應(yīng)傳遞回來的結(jié)果??
- ????}??
- } ?
(4)AndroidMainfest.xml:修改配置清單文件
? ? ◆添加網(wǎng)絡(luò)訪問權(quán)限(重要): <uses-permission android:name="android.permission.INTERNET"></uses-permission> ?
? ? ◆注冊personActivity組件:<activity ? ?android:name=".personalActivity" >?
- <?xml?version="1.0"?encoding="utf-8"?>??
- <manifest?xmlns:android="http://schemas.android.com/apk/res/android"??
- ????package="com.example.http_client"??
- ????android:versionCode="1"??
- ????android:versionName="1.0"?>??
- ????<uses-permission?android:name="android.permission.INTERNET"></uses-permission>??
- ????<uses-sdk??
- ????????android:minSdkVersion="8"??
- ????????android:targetSdkVersion="21"?/>??
- ??
- ????<application??
- ????????android:allowBackup="true"??
- ????????android:icon="@drawable/ic_launcher"??
- ????????android:label="@string/app_name"??
- ????????android:theme="@style/AppTheme"?>??
- ????????<activity??
- ????????????android:name=".LoginActivity"??
- ????????????android:label="@string/app_name"?>??
- ????????????<intent-filter>??
- ????????????????<action?android:name="android.intent.action.MAIN"?/>??
- ??
- ????????????????<category?android:name="android.intent.category.LAUNCHER"?/>??
- ????????????</intent-filter>??
- ????????</activity>??
- ??????????
- ????????<activity????android:name=".personalActivity"?>??
- ????????</activity>??
- ????</application>??
- ??
- </manifest>?
(1)Tomcat已啟動斗遏,并且Java Web程序已部署到Tomcat服務(wù)器中山卦; ? ?
(2)客戶端訪問服務(wù)端的URL要正確,在此為http://10.0.2.2:8080/login/LoginServlet而不是Java Web中的http://localhost:8080/login/LoginServlet诵次。因?yàn)槟M機(jī)通過127.0.0.1訪問的是模擬器本身账蓉。在模擬器上訪問安裝模擬器的電腦枚碗,需要使用android內(nèi)置的IP:10.0.2.2。10.0.2.2 是模擬器設(shè)置的特定ip铸本,是你的電腦的別名肮雨,如果是網(wǎng)絡(luò)服務(wù)器,可直接寫相應(yīng)的IP或網(wǎng)址归敬; ? ???
(3)需要在清單文件中添加訪問網(wǎng)絡(luò)的權(quán)限酷含; ??
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
(4)不能直接訪問網(wǎng)絡(luò),需進(jìn)行相應(yīng)處理汪茧,建議采用消息傳遞機(jī)制椅亚;