Android POST GET请求

Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍常用的两种网络请求方式POST,GET。首先要区别POST和GET请求
1. GET是从服务器上获取数据,POST是向服务器传送数据。
2. GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程
3. GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据
4. GET安全性非常低,POST安全性较高。但是执行效率却比POST方法好。

   下面分别用Post和GET方法来实现Android应用的人员登入,首先我们搭建一个服务器,这里我使用WAMP环境,使用ThinkPHP框架。详细的服务器搭建就不说了。给出主要响应代码:
  1. <?php  
  2. namespace Home\Controller;  
  3. use Think\Controller;  
  4. class AndroidController extends Controller {  
  5.     public function index()  
  6.     {  
  7.           //获取账号密码  
  8.           $id=I('username');  
  9.           $pwd=I('password');  
  10.           $User=M('user');     
  11.           //查询数据库  
  12.           $data = $User->where("NAME='$id'  AND PASSWORD='$pwd' ")->find();  
  13.           //登入成功  
  14.           if($data)  
  15.           {  
  16.               $response = array('success' => true,'msg'=>'登入成功');  
  17.                 
  18.               $response=json_encode($response);  
  19.               echo  $response;//返回json格式  
  20.           }  
  21.           //登入失败  
  22.           else  
  23.           {  
  24.               $response = array('success' => false,'msg'=>'账号或密码错误');              
  25.               $response=json_encode($response);  
  26.               echo  $response;//返回json格式  
  27.           }  
  28.     }  
  29.           
  30. }  
复制代码
记得添加网络权限   
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    Android的网络请求主要使用java.net包中的HttpURLConnection类,服务器与Android客户端数据交互格式为json
1.利用POST请求方式来实现人员登入。
  1. package com.dream.apm;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.pm.ActivityInfo;  
  5. import android.os.Bundle;  
  6. import android.os.Handler;  
  7. import android.os.Looper;  
  8. import android.os.Message;  
  9. import android.view.View;  
  10. import android.view.Window;  
  11. import android.view.WindowManager;  
  12. import android.widget.Button;  
  13. import android.widget.EditText;  
  14. import android.widget.LinearLayout;  
  15. import android.widget.Toast;  
  16. import org.json.JSONArray;  
  17. import org.json.JSONException;  
  18. import org.json.JSONObject;  
  19.   
  20. import java.io.*;  
  21. import java.net.HttpURLConnection;  
  22. import java.net.MalformedURLException;  
  23. import java.net.URL;  
  24. import java.net.URLEncoder;  
  25.   
  26. public class MyActivity extends Activity {  
  27.   
  28.     //请求地址  
  29.     private static String url="http://10.0.2.2:8080/think/index.php/Home/Android";  
  30.     public Button start;  
  31.   
  32.     public EditText username,password;  
  33.   
  34.     public URL http_url;  
  35.   
  36.     public String data;  
  37.   
  38.     public Handler handler;  
  39.   
  40.     @Override  
  41.       public void onCreate(Bundle savedInstanceState){  
  42.         super.onCreate(savedInstanceState);  
  43.         //设置全屏  
  44.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  45.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  46.         //去除应用程序标题  
  47.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  48.         //设置竖屏  
  49.         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
  50.         setContentView(R.layout.main);  
  51.   
  52.         start=(Button)findViewById(R.id.start_one);  
  53.         username=(EditText)findViewById(R.id.username);  
  54.         password=(EditText)findViewById(R.id.password);  
  55.         //消息处理器  
  56.   
  57.         handler=new Handler(Looper.getMainLooper())  
  58.         {  
  59.             @Override  
  60.             public void handleMessage(Message msg)  
  61.             {  
  62.                 super.handleMessage(msg);  
  63.                 switch(msg.what)  
  64.                 {  
  65.                     //登入成功  
  66.                     case 1:  
  67.                         Toast.makeText(MyActivity.this, msg.getData().getString("msg"),  
  68.                                 Toast.LENGTH_SHORT).show();  
  69.                         break;  
  70.                     //登入失败  
  71.                     case 2:  
  72.                         Toast.makeText(MyActivity.this, msg.getData().getString("msg"),  
  73.                                 Toast.LENGTH_SHORT).show();  
  74.                         break;  
  75.   
  76.                 }  
  77.             }  
  78.         };  
  79.   
  80.         start.setOnClickListener(new View.OnClickListener() {  
  81.             @Override  
  82.             public void onClick(View v) {  
  83.                 //是否输入账号密码  
  84.                 if(username.getText().toString().length()>0&&password.getText().toString().length()>0){  
  85.                     //子线程可以获取UI的值,不能更改  
  86.                     new Thread(new Runnable() {  
  87.                         @Override  
  88.                         public void run() {  
  89.                             try {  
  90.                                 http_url=new URL(url);  
  91.                                 if(http_url!=null)  
  92.                                 {  
  93.                                     //打开一个HttpURLConnection连接  
  94.                                     HttpURLConnection conn = (HttpURLConnection) http_url.openConnection();  
  95.                                     conn.setConnectTimeout(5* 1000);//设置连接超时  
  96.                                     conn.setRequestMethod("POST");//以get方式发起请求  
  97.                                     //允许输入输出流  
  98.                                     conn.setDoInput(true);  
  99.                                     conn.setDoOutput(true);  
  100.                                     conn.setUseCaches(false);//使用Post方式不能使用缓存  
  101.                                     //获取账号密码  
  102.                                     String params = "username=" + username.getText().toString()  
  103.                                             + "&password=" + password.getText().toString();  
  104.                                     //设置请求体的类型是文本类型  
  105.                                     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
  106.                                     //设置请求体的长度--字节长度  
  107.                                     conn.setRequestProperty("Content-Length",String.valueOf(params.getBytes().length) );  
  108.                                     //发送post参数  
  109.                                     BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));  
  110.                                     bw.write(params);  
  111.                                     bw.close();  
  112.                                     //接收服务器响应  
  113.                                     if (conn.getResponseCode() == 200) {  
  114.                                         InputStream is = conn.getInputStream();//得到网络返回的输入流  
  115.                                         BufferedReader buf=new BufferedReader(new InputStreamReader(is));//转化为字符缓冲流  
  116.                                         data=buf.readLine();  
  117.                                         buf.close();is.close();  
  118.                                         //判断登入结果  
  119.                                         analyse(data);  
  120.                                     }  
  121.                                 }  
  122.                             } catch( Exception e) {  
  123.                                 e.printStackTrace();  
  124.                             }  
  125.                         }  
  126.                     }).start();  
  127.                 }  
  128.                 else  
  129.                 {  
  130.                     Toast.makeText(MyActivity.this, "请完整输入账号密码",  
  131.                             Toast.LENGTH_SHORT).show();  
  132.                 }  
  133.             }  
  134.         });  
  135.     }  
  136.   
  137.     public void analyse (String data)  
  138.     {  
  139.         System.out.println(data);  
  140.         try {  
  141.             JSONObject json_data=new JSONObject(data);  
  142.             Boolean state=json_data.getBoolean("success");  
  143.             String msg=json_data.getString("msg");  
  144.             //登入成功  
  145.             if(state)  
  146.             {  
  147.                 //发送消息  
  148.                 Message message= new Message();  
  149.                 message.what=1;  
  150.                 Bundle temp = new Bundle();  
  151.                 temp.putString("msg",msg);  
  152.                 message.setData(temp);  
  153.                 handler.sendMessage(message);  
  154.   
  155.             }  
  156.             //登入失败  
  157.             else  
  158.             {  
  159.                 Message message= new Message();  
  160.                 message.what=2;  
  161.                 Bundle temp = new Bundle();  
  162.                 temp.putString("msg",msg);  
  163.                 message.setData(temp);  
  164.                 handler.sendMessage(message);  
  165.             }  
  166.         } catch (JSONException e) {  
  167.             e.printStackTrace();  
  168.         }  
  169.     }  
  170. }  
复制代码
2.利用GET请求方式来实现人员登入

  1. package com.dream.apm;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.pm.ActivityInfo;  
  5. import android.os.Bundle;  
  6. import android.os.Handler;  
  7. import android.os.Looper;  
  8. import android.os.Message;  
  9. import android.view.View;  
  10. import android.view.Window;  
  11. import android.view.WindowManager;  
  12. import android.widget.Button;  
  13. import android.widget.EditText;  
  14. import android.widget.LinearLayout;  
  15. import android.widget.Toast;  
  16. import org.json.JSONArray;  
  17. import org.json.JSONException;  
  18. import org.json.JSONObject;  
  19.   
  20. import java.io.*;  
  21. import java.net.HttpURLConnection;  
  22. import java.net.MalformedURLException;  
  23. import java.net.URL;  
  24. import java.net.URLEncoder;  
  25.   
  26. public class MyActivity extends Activity {  
  27.   
  28.     public Button start;  
  29.   
  30.     public EditText username,password;  
  31.   
  32.     public URL http_url;  
  33.   
  34.     public String data;  
  35.   
  36.     public Handler handler;  
  37.   
  38.     @Override  
  39.       public void onCreate(Bundle savedInstanceState){  
  40.         super.onCreate(savedInstanceState);  
  41.         //设置全屏  
  42.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  43.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  44.         //去除应用程序标题  
  45.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  46.         //设置竖屏  
  47.         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
  48.         setContentView(R.layout.main);  
  49.   
  50.         start=(Button)findViewById(R.id.start_one);  
  51.         username=(EditText)findViewById(R.id.username);  
  52.         password=(EditText)findViewById(R.id.password);  
  53.         //消息处理器  
  54.   
  55.         handler=new Handler(Looper.getMainLooper())  
  56.         {  
  57.             @Override  
  58.             public void handleMessage(Message msg)  
  59.             {  
  60.                 super.handleMessage(msg);  
  61.                 switch(msg.what)  
  62.                 {  
  63.                     //登入成功  
  64.                     case 1:  
  65.                         Toast.makeText(MyActivity.this, msg.getData().getString("msg"),  
  66.                                 Toast.LENGTH_SHORT).show();  
  67.                         break;  
  68.                     //登入失败  
  69.                     case 2:  
  70.                         Toast.makeText(MyActivity.this, msg.getData().getString("msg"),  
  71.                                 Toast.LENGTH_SHORT).show();  
  72.                         break;  
  73.   
  74.                 }  
  75.             }  
  76.         };  
  77.   
  78.         start.setOnClickListener(new View.OnClickListener() {  
  79.             @Override  
  80.             public void onClick(View v) {  
  81.                 //是否输入账号密码  
  82.                 if(username.getText().toString().length()>0&&password.getText().toString().length()>0){  
  83.                     //子线程可以获取UI的值,不能更改  
  84.                     new Thread(new Runnable() {  
  85.                         @Override  
  86.                         public void run() {  
  87.                             try {  
  88.                                 //请求地址--  
  89.                                  String url="http://10.0.2.2:8080/think/index.php/Home/Android?"+ "username=" + URLEncoder.encode(username.getText().toString(), "UTF-8")  
  90.                                         + "&password=" + URLEncoder.encode(password.getText().toString(), "UTF-8");  
  91.                                 http_url=new URL(url);  
  92.                                 if(http_url!=null)  
  93.                                 {  
  94.                                     //打开一个HttpURLConnection连接  
  95.                                     HttpURLConnection conn = (HttpURLConnection) http_url.openConnection();  
  96.                                     conn.setConnectTimeout(5* 1000);//设置连接超时  
  97.                                     conn.setRequestMethod("GET");//以get方式发起请求  
  98.                                     //允许输入流  
  99.                                     conn.setDoInput(true);  
  100.                                     //接收服务器响应  
  101.                                     if (conn.getResponseCode() == 200) {  
  102.                                         InputStream is = conn.getInputStream();//得到网络返回的输入流  
  103.                                         BufferedReader buf=new BufferedReader(new InputStreamReader(is));//转化为字符缓冲流  
  104.                                         data=buf.readLine();  
  105.                                         buf.close();is.close();  
  106.                                         //判断登入结果  
  107.                                         analyse(data);  
  108.                                     }  
  109.                                 }  
  110.                             } catch( Exception e) {  
  111.                                 e.printStackTrace();  
  112.                             }  
  113.                         }  
  114.                     }).start();  
  115.                 }  
  116.                 else  
  117.                 {  
  118.                     Toast.makeText(MyActivity.this, "请完整输入账号密码",  
  119.                             Toast.LENGTH_SHORT).show();  
  120.                 }  
  121.             }  
  122.         });  
  123.     }  
  124.   
  125.     public void analyse (String data)  
  126.     {  
  127.         System.out.println(data);  
  128.         try {  
  129.             JSONObject json_data=new JSONObject(data);  
  130.             Boolean state=json_data.getBoolean("success");  
  131.             String msg=json_data.getString("msg");  
  132.             //登入成功  
  133.             if(state)  
  134.             {  
  135.                 //发送消息  
  136.                 Message message= new Message();  
  137.                 message.what=1;  
  138.                 Bundle temp = new Bundle();  
  139.                 temp.putString("msg",msg);  
  140.                 message.setData(temp);  
  141.                 handler.sendMessage(message);  
  142.   
  143.             }  
  144.             //登入失败  
  145.             else  
  146.             {  
  147.                 Message message= new Message();  
  148.                 message.what=2;  
  149.                 Bundle temp = new Bundle();  
  150.                 temp.putString("msg",msg);  
  151.                 message.setData(temp);  
  152.                 handler.sendMessage(message);  
  153.             }  
  154.         } catch (JSONException e) {  
  155.             e.printStackTrace();  
  156.         }  
  157.     }  
  158. }  
复制代码
运行结果:




posted @ 2015-05-27 15:35  techfox  阅读(355)  评论(0编辑  收藏  举报