码迷,mamicode.com
首页 > 移动开发 > 详细

Android POST GET请求

时间:2015-05-27 19:28:25      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:android   服务器   手机客户端   网络   安全性   

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. }  

复制代码

运行结果:


技术分享



技术分享


Android POST GET请求

标签:android   服务器   手机客户端   网络   安全性   

原文地址:http://wufanxin.blog.51cto.com/7318130/1655662

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!