APP,POST sample

http://bbs.125.la/forum.php?mod=viewthread&tid=13979320&highlight=

1. Terminal Fuction:

Simulate the process of registation:

        用户点击注册按钮后,客户端会通过HTTP协议向服务器发送POST请求/GET请求并传送数据,服务器获得数据后进行相关数据库处理,然后服务器再将处理的结果作为响应返回给客户端,客户端根据获得的响应信息继续处理业务逻辑。

2. Program Structure:

(1)LoginActivity.java:客户端界面(UI),在子线程内通过消息机制完成向服务器发送请求,接收并处理响应信息;

(2)personalActivity.java:用户界面(UI),当用户注册成功后(即HTTP通信成功),客户端跳转至该界面;

(3)LoginToSever.java:客户端与服务器通信的实际实现类,包括发送请求、获取响应信息;

3. APP realize:

(1)LoginActivity.java:客户端界面,在子线程内通过消息机制完成向服务器发送请求,接收并处理响应信息;


  • 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;  
  •   
  • /*通过子进程、消息传递机制,完成HTTP网络通信*/  
  • 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.创建一个Handler类对象,并重写handleMessage()方法  
  •                 final Handler myHandler=new Handler(){  
  •                     public void handleMessage(Message msg) {  
  •                         String response=(String)msg.obj;                //读取obj发送过来的消息                
  •                         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.创建一个子线程  
  •                 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); //调试:打印服务器返回的结果,测试是否通信成功      
  •                           
  •                         Message msg=new Message();  
  •                         msg.obj=result; //将响应信息保存到obj中  
  •                         myHandler.sendMessage(msg);  
  •                     }             
  •                 }).start();  
  •             }  
  •         });  
  •     }  
  • }  
  • (2)personalActivity.java:用户界面(UI),当用户注册成功后(即HTTP通信成功),客户端跳转至该界面;


    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.       

    (3)LoginToSever.java:(POST请求)客户端与服务器通信的实际实现类,包括发送请求、获取响应信息;


    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";    //访问服务器资源的URL地址  
    22. //  private String url="http://localhost:8080/login/LoginServlet";  
    23.     String result="";         
    24.       
    25.     /*doPost方法: 
    26.      *  作用:实现客户端向服务器发送POST请求*/  
    27.     public String doPost(String name,String psd)    
    28.     {  
    29.         HttpClient hc=new DefaultHttpClient();                      //a.创建HttpClient对象  
    30.         HttpPost httpPost=new HttpPost(url);                                //b.根据URL地址创建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.创建参数列表,每个参数以键值对的形式且保存在NameValuePair中              
    37.         HttpEntity  he;  
    38.       try {  
    39.             he = new UrlEncodedFormEntity(params,"GBK");   //d.根据参数创建HttpEntity对象  
    40.             httpPost.setEntity(he);                        //e.将HttpEntity对象赋给HttpPost对象  
    41.             HttpResponse response = hc.execute(httpPost);  //f.执行HttpClient的execute()方法获取HttpResponse对象          
    42.             if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  
    43.             {  
    44.                     HttpEntity het = response.getEntity(); //g.执行HttpResponse的getEntity方法,获取HttpEntity对象  
    45.                     InputStream is= het.getContent(); //h.执行HttpEntity的getContent方法,获取对应的输入流  
    46.                     BufferedReader br = new BufferedReader(new InputStreamReader(is));
    47.                                                     //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()); //调试:打印异常日志  
    62.             result="Exception";  
    63.         }  
    64.   
    65.         return result;//返回服务器响应传递回来的结果  
    66.     }  
    67. }  

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

        ◆添加网络访问权限(重要): <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.注意事项

    (1)Tomcat已启动,并且Java Web程序已部署到Tomcat服务器中;    

    (2)客户端访问服务端的URL要正确,在此为http://10.0.2.2:8080/login/LoginServlet而不是Java Web中的http://localhost:8080/login/LoginServlet。因为模拟机通过127.0.0.1访问的是模拟器本身。在模拟器上访问安装模拟器的电脑,需要使用android内置的IP:10.0.2.2。10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名,如果是网络服务器,可直接写相应的IP或网址;      

    (3)需要在清单文件中添加访问网络的权限;   

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    (4)不能直接访问网络,需进行相应处理,建议采用消息传递机制;

    最后编辑于
    ©著作权归作者所有,转载或内容合作请联系作者
    • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
      沈念sama阅读 202,802评论 5 476
    • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
      沈念sama阅读 85,109评论 2 379
    • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
      开封第一讲书人阅读 149,683评论 0 335
    • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
      开封第一讲书人阅读 54,458评论 1 273
    • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
      茶点故事阅读 63,452评论 5 364
    • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
      开封第一讲书人阅读 48,505评论 1 281
    • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
      沈念sama阅读 37,901评论 3 395
    • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
      开封第一讲书人阅读 36,550评论 0 256
    • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
      沈念sama阅读 40,763评论 1 296
    • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
      茶点故事阅读 35,556评论 2 319
    • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
      茶点故事阅读 37,629评论 1 329
    • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
      沈念sama阅读 33,330评论 4 318
    • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
      茶点故事阅读 38,898评论 3 307
    • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
      开封第一讲书人阅读 29,897评论 0 19
    • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
      开封第一讲书人阅读 31,140评论 1 259
    • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
      沈念sama阅读 42,807评论 2 349
    • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
      茶点故事阅读 42,339评论 2 342

    推荐阅读更多精彩内容

    • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
      passiontim阅读 171,373评论 25 707
    • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
      卡卡罗2017阅读 134,579评论 18 139
    • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
      杂货铺老板阅读 1,336评论 0 2
    • 该文仅对于中间这种支付方式有参考价值哟 一、开发背景 在微信公众号中,需要进行微信支付且为微信公众号网页支付。 二...
      英文名叫夏天阅读 1,776评论 0 7
    • 升大四前的暑假,不顾父母反对,毅然决然一个人来到北京找实习工作,看似老套的剧情,又是我真实的写照。 来之前的两天,...
      炸毛儿君阅读 109评论 0 0