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)不能直接访问网络,需进行相应处理,建议采用消息传递机制;

    最后编辑于
    ©著作权归作者所有,转载或内容合作请联系作者
    【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
    平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

    推荐阅读更多精彩内容

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