APP,POST sample

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)信息;


  • package?com.example.http_client;??
  • import?android.app.Activity;??
  • import?android.content.Intent;??
  • import?android.os.Bundle;??
  • import?android.os.Handler;??
  • import?android.os.Message;??
  • import?android.view.View;??
  • import?android.view.View.OnClickListener;??
  • import?android.widget.Button;??
  • import?android.widget.EditText;??
  • import?android.widget.Toast;??
  • ??
  • /*通過子進(jìn)程、消息傳遞機(jī)制谦炒,完成HTTP網(wǎng)絡(luò)通信*/??
  • public?class?LoginActivity?extends?Activity?{??
  • ????private?EditText?userName;??
  • ????private?EditText?password;??
  • ????private?EditText?confirmPsd;??
  • ????private?Button?registerBtn;??
  • ????private?Button?resetBtn;??
  • ????private?void?init()??
  • ????{??
  • ????????userName?=?(EditText)findViewById(R.id.uername);??
  • ????????password=?(EditText)findViewById(R.id.password);??
  • ????????confirmPsd=(EditText)findViewById(R.id.confirm);??
  • ????????registerBtn=?(Button)findViewById(R.id.register);??
  • ????????resetBtn=(Button)findViewById(R.id.reset);??
  • ????}??
  • ????@Override??
  • ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.main);??
  • ????????init();?????//初始化控件??
  • ????????this.registerBtn.setOnClickListener(new?OnClickListener()?{??
  • ????????????public?void?onClick(View?v)?{??
  • ??????????????????//1.創(chuàng)建一個Handler類對象贯莺,并重寫handleMessage()方法??
  • ????????????????final?Handler?myHandler=new?Handler(){??
  • ????????????????????public?void?handleMessage(Message?msg)?{??
  • ????????????????????????String?response=(String)msg.obj;????????????????//讀取obj發(fā)送過來的消息????????????????
  • ????????????????????????if("true".equals(response))??
  • ????????????????????????{??
  • ????????????????????????????Intent?intent=new?Intent();??
  • ????????????????????????????intent.setClass(LoginActivity.this,?personalActivity.class);??
  • ????????????????????????????startActivity(intent);??
  • ????????????????????????}??
  • ????????????????????????else??
  • ????????????????????????{??
  • ????????????????????????????Toast.makeText(LoginActivity.this,?"用戶名與密碼不對!",Toast.LENGTH_SHORT).show();??
  • ????????????????????????}??
  • ????????????????????}??
  • ????????????????};??
  • ????????????????//2.創(chuàng)建一個子線程??
  • ????????????????new?Thread(new?Runnable(){??
  • ????????????????????public?void?run()?{??
  • ????????????????????????LoginToServer?login?=?new?LoginToServer();??
  • ????????????????????????String?result=login.doPost(userName.getText().toString(),?password.getText().toString());??
  • ??????????????????????????
  • ????????????????????????System.out.println(result);?//調(diào)試:打印服務(wù)器返回的結(jié)果宁改,測試是否通信成功??????
  • ??????????????????????????
  • ????????????????????????Message?msg=new?Message();??
  • ????????????????????????msg.obj=result;?//將響應(yīng)信息保存到obj中??
  • ????????????????????????myHandler.sendMessage(msg);??
  • ????????????????????}?????????????
  • ????????????????}).start();??
  • ????????????}??
  • ????????});??
  • ????}??
  • } ?
  • (2)personalActivity.java:用戶界面(UI)缕探,當(dāng)用戶注冊成功后(即HTTP通信成功),客戶端跳轉(zhuǎn)至該界面;


    1. package?com.example.http_client;??
    2. ??
    3. import?android.app.Activity;??
    4. import?android.os.Bundle;??
    5. ??
    6. public?class?personalActivity?extends?Activity?{??
    7. ??
    8. ????@Override??
    9. ????protected?void?onCreate(Bundle?savedInstanceState)?{??
    10. ????????super.onCreate(savedInstanceState);??
    11. ????????setContentView(R.layout.personal);??
    12. ????}??
    13. ??????
    14. }?

    (3)LoginToSever.java:(POST請求)客戶端與服務(wù)器通信的實(shí)際實(shí)現(xiàn)類还蹲,包括發(fā)送請求爹耗、獲取響應(yīng)信息;


    1. package?com.example.http_client; ?
    2. import?java.io.BufferedReader;??
    3. import?java.io.IOException;??
    4. import?java.io.InputStream;??
    5. import?java.io.InputStreamReader;??
    6. import?java.io.UnsupportedEncodingException;??
    7. import?java.util.ArrayList;??
    8. import?java.util.List; ???
    9. import?org.apache.http.HttpEntity;??
    10. import?org.apache.http.HttpResponse;??
    11. import?org.apache.http.HttpStatus;??
    12. import?org.apache.http.NameValuePair;??
    13. import?org.apache.http.client.ClientProtocolException;??
    14. import?org.apache.http.client.HttpClient;??
    15. import?org.apache.http.client.entity.UrlEncodedFormEntity;??
    16. import?org.apache.http.client.methods.HttpPost;??
    17. import?org.apache.http.impl.client.DefaultHttpClient;??
    18. import?org.apache.http.message.BasicNameValuePair;??
    19. ??
    20. public?class?LoginToServer?{??
    21. ????private?String?url="http://10.0.2.2:8080/login/LoginServlet"; ? ?//訪問服務(wù)器資源的URL地址??
    22. //??private?String?url="http://localhost:8080/login/LoginServlet";??
    23. ????String?result="";?????????
    24. ??????
    25. ????/*doPost方法:?
    26. ?????*??作用:實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送POST請求*/??
    27. ????public?String?doPost(String?name,String?psd)????
    28. ????{??
    29. ????????HttpClient?hc=new?DefaultHttpClient();??????????????????????//a.創(chuàng)建HttpClient對象??
    30. ????????HttpPost?httpPost=new?HttpPost(url);????????????????????????????????//b.根據(jù)URL地址創(chuàng)建HttpPost對象??
    31. ????????NameValuePair?param1=?new?BasicNameValuePair("username",name);??
    32. ????????NameValuePair?param2=new?BasicNameValuePair("psd",psd);??
    33. ????//??System.out.println("username="+name+"psd="+psd);??
    34. ????????List<NameValuePair>?params?=?new?ArrayList<NameValuePair>();??????
    35. ????????params.add(param1);??
    36. ????????params.add(param2);?//c.創(chuàng)建參數(shù)列表,每個參數(shù)以鍵值對的形式且保存在NameValuePair中??????????????
    37. ????????HttpEntity??he;??
    38. ??????try?{??
    39. ????????????he?=?new?UrlEncodedFormEntity(params,"GBK");???//d.根據(jù)參數(shù)創(chuàng)建HttpEntity對象??
    40. ????????????httpPost.setEntity(he);????????????????????????//e.將HttpEntity對象賦給HttpPost對象??
    41. ????????????HttpResponse?response?=?hc.execute(httpPost);??//f.執(zhí)行HttpClient的execute()方法獲取HttpResponse對象??????????
    42. ????????????if(response.getStatusLine().getStatusCode()?==?HttpStatus.SC_OK)??
    43. ????????????{??
    44. ????????????????????HttpEntity?het?=?response.getEntity();?//g.執(zhí)行HttpResponse的getEntity方法谜喊,獲取HttpEntity對象??
    45. ????????????????????InputStream?is=?het.getContent();?//h.執(zhí)行HttpEntity的getContent方法潭兽,獲取對應(yīng)的輸入流??
    46. ????????????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(is));
    47. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //i.讀取輸入流中的內(nèi)容,并以字符串的形式返回????????
    48. ????????????????????String?readLine?=?null;??
    49. ????????????????????while((readLine?=?br.readLine())?!=?null?)??
    50. ????????????????????{??
    51. ????????????????????????????result=result+readLine;??
    52. ????????????????????}??
    53. ????????????????????is.close();??
    54. ????????????}??
    55. ????????????else??
    56. ????????????{??
    57. ????????????????result="error";??
    58. ????????????}??
    59. ????????}?catch?(IOException?e)?{??
    60. ????????????e.printStackTrace();??
    61. ????//??????System.out.println(e.getMessage());?//調(diào)試:打印異常日志??
    62. ????????????result="Exception";??
    63. ????????}??
    64. ??
    65. ????????return?result;//返回服務(wù)器響應(yīng)傳遞回來的結(jié)果??
    66. ????}??
    67. } ?

    (4)AndroidMainfest.xml:修改配置清單文件

    ? ? ◆添加網(wǎng)絡(luò)訪問權(quán)限(重要): <uses-permission android:name="android.permission.INTERNET"></uses-permission> ?

    ? ? ◆注冊personActivity組件:<activity ? ?android:name=".personalActivity" >?

    1. <?xml?version="1.0"?encoding="utf-8"?>??
    2. <manifest?xmlns:android="http://schemas.android.com/apk/res/android"??
    3. ????package="com.example.http_client"??
    4. ????android:versionCode="1"??
    5. ????android:versionName="1.0"?>??
    6. ????<uses-permission?android:name="android.permission.INTERNET"></uses-permission>??
    7. ????<uses-sdk??
    8. ????????android:minSdkVersion="8"??
    9. ????????android:targetSdkVersion="21"?/>??
    10. ??
    11. ????<application??
    12. ????????android:allowBackup="true"??
    13. ????????android:icon="@drawable/ic_launcher"??
    14. ????????android:label="@string/app_name"??
    15. ????????android:theme="@style/AppTheme"?>??
    16. ????????<activity??
    17. ????????????android:name=".LoginActivity"??
    18. ????????????android:label="@string/app_name"?>??
    19. ????????????<intent-filter>??
    20. ????????????????<action?android:name="android.intent.action.MAIN"?/>??
    21. ??
    22. ????????????????<category?android:name="android.intent.category.LAUNCHER"?/>??
    23. ????????????</intent-filter>??
    24. ????????</activity>??
    25. ??????????
    26. ????????<activity????android:name=".personalActivity"?>??
    27. ????????</activity>??
    28. ????</application>??
    29. ??
    30. </manifest>?

    4.注意事項(xiàng)

    (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ī)制椅亚;

    最后編輯于
    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    • 序言:七十年代末,一起剝皮案震驚了整個濱河市舱污,隨后出現(xiàn)的幾起案子呀舔,更是在濱河造成了極大的恐慌,老刑警劉巖扩灯,帶你破解...
      沈念sama閱讀 216,591評論 6 501
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件媚赖,死亡現(xiàn)場離奇詭異,居然都是意外死亡珠插,警方通過查閱死者的電腦和手機(jī)惧磺,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 92,448評論 3 392
    • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捻撑,“玉大人磨隘,你說我怎么就攤上這事」嘶迹” “怎么了番捂?”我有些...
      開封第一講書人閱讀 162,823評論 0 353
    • 文/不壞的土叔 我叫張陵,是天一觀的道長江解。 經(jīng)常有香客問我设预,道長,這世上最難降的妖魔是什么犁河? 我笑而不...
      開封第一講書人閱讀 58,204評論 1 292
    • 正文 為了忘掉前任鳖枕,我火速辦了婚禮,結(jié)果婚禮上桨螺,老公的妹妹穿的比我還像新娘耕魄。我一直安慰自己,他們只是感情好彭谁,可當(dāng)我...
      茶點(diǎn)故事閱讀 67,228評論 6 388
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著允扇,像睡著了一般缠局。 火紅的嫁衣襯著肌膚如雪则奥。 梳的紋絲不亂的頭發(fā)上,一...
      開封第一講書人閱讀 51,190評論 1 299
    • 那天狭园,我揣著相機(jī)與錄音读处,去河邊找鬼。 笑死唱矛,一個胖子當(dāng)著我的面吹牛罚舱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绎谦,決...
      沈念sama閱讀 40,078評論 3 418
    • 文/蒼蘭香墨 我猛地睜開眼管闷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窃肠?” 一聲冷哼從身側(cè)響起包个,我...
      開封第一講書人閱讀 38,923評論 0 274
    • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冤留,沒想到半個月后碧囊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
      沈念sama閱讀 45,334評論 1 310
    • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纤怒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點(diǎn)故事閱讀 37,550評論 2 333
    • 正文 我和宋清朗相戀三年糯而,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泊窘。...
      茶點(diǎn)故事閱讀 39,727評論 1 348
    • 序言:一個原本活蹦亂跳的男人離奇死亡熄驼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出州既,到底是詐尸還是另有隱情谜洽,我是刑警寧澤,帶...
      沈念sama閱讀 35,428評論 5 343
    • 正文 年R本政府宣布吴叶,位于F島的核電站阐虚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚌卤。R本人自食惡果不足惜实束,卻給世界環(huán)境...
      茶點(diǎn)故事閱讀 41,022評論 3 326
    • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逊彭。 院中可真熱鬧咸灿,春花似錦、人聲如沸侮叮。這莊子的主人今日做“春日...
      開封第一講書人閱讀 31,672評論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至审胸,卻和暖如春亥宿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砂沛。 一陣腳步聲響...
      開封第一講書人閱讀 32,826評論 1 269
    • 我被黑心中介騙來泰國打工烫扼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碍庵。 一個月前我還...
      沈念sama閱讀 47,734評論 2 368
    • 正文 我出身青樓映企,卻偏偏與公主長得像,于是被迫代替她去往敵國和親静浴。 傳聞我的和親對象是個殘疾皇子堰氓,可洞房花燭夜當(dāng)晚...
      茶點(diǎn)故事閱讀 44,619評論 2 354

    推薦閱讀更多精彩內(nèi)容

    • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
      passiontim閱讀 172,077評論 25 707
    • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)马绝,斷路器豆赏,智...
      卡卡羅2017閱讀 134,652評論 18 139
    • 這部分主要是開源Java EE框架方面的內(nèi)容,包括Hibernate富稻、MyBatis掷邦、Spring、Spring ...
      雜貨鋪老板閱讀 1,374評論 0 2
    • 該文僅對于中間這種支付方式有參考價值喲 一椭赋、開發(fā)背景 在微信公眾號中抚岗,需要進(jìn)行微信支付且為微信公眾號網(wǎng)頁支付。 二...
      英文名叫夏天閱讀 1,808評論 0 7
    • 升大四前的暑假哪怔,不顧父母反對宣蔚,毅然決然一個人來到北京找實(shí)習(xí)工作,看似老套的劇情认境,又是我真實(shí)的寫照胚委。 來之前的兩天,...
      炸毛兒君閱讀 111評論 0 0