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框架。详细的服务器搭建就不说了。给出主要响应代码:
<?php namespace Home\Controller; use Think\Controller; class AndroidController extends Controller { public function index() { //获取账号密码 $id=I('username'); $pwd=I('password'); $User=M('user'); //查询数据库 $data = $User->where("NAME='$id' AND PASSWORD='$pwd' ")->find(); //登入成功 if($data) { $response = array('success' => true,'msg'=>'登入成功'); $response=json_encode($response); echo $response;//返回json格式 } //登入失败 else { $response = array('success' => false,'msg'=>'账号或密码错误'); $response=json_encode($response); echo $response;//返回json格式 } } }
记得添加网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Android的网络请求主要使用java.net包中的HttpURLConnection类,服务器与Android客户端数据交互格式为Json。
1.利用POST请求方式来实现人员登入。
package com.dream.apm; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; public class MyActivity extends Activity { //请求地址 private static String url="http://10.0.2.2:8080/think/index.php/Home/Android"; public Button start; public EditText username,password; public URL http_url; public String data; public Handler handler; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //设置全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //去除应用程序标题 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //设置竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setContentView(R.layout.main); start=(Button)findViewById(R.id.start_one); username=(EditText)findViewById(R.id.username); password=(EditText)findViewById(R.id.password); //消息处理器 handler=new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what) { //登入成功 case 1: Toast.makeText(MyActivity.this, msg.getData().getString("msg"), Toast.LENGTH_SHORT).show(); break; //登入失败 case 2: Toast.makeText(MyActivity.this, msg.getData().getString("msg"), Toast.LENGTH_SHORT).show(); break; } } }; start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //是否输入账号密码 if(username.getText().toString().length()>0&&password.getText().toString().length()>0){ //子线程可以获取UI的值,不能更改 new Thread(new Runnable() { @Override public void run() { try { http_url=new URL(url); if(http_url!=null) { //打开一个HttpURLConnection连接 HttpURLConnection conn = (HttpURLConnection) http_url.openConnection(); conn.setConnectTimeout(5* 1000);//设置连接超时 conn.setRequestMethod("POST");//以get方式发起请求 //允许输入输出流 conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false);//使用Post方式不能使用缓存 //获取账号密码 String params = "username=" + username.getText().toString() + "&password=" + password.getText().toString(); //设置请求体的类型是文本类型 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //设置请求体的长度--字节长度 conn.setRequestProperty("Content-Length",String.valueOf(params.getBytes().length) ); //发送post参数 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); bw.write(params); bw.close(); //接收服务器响应 if (conn.getResponseCode() == 200) { InputStream is = conn.getInputStream();//得到网络返回的输入流 BufferedReader buf=new BufferedReader(new InputStreamReader(is));//转化为字符缓冲流 data=buf.readLine(); buf.close();is.close(); //判断登入结果 analyse(data); } } } catch( Exception e) { e.printStackTrace(); } } }).start(); } else { Toast.makeText(MyActivity.this, "请完整输入账号密码", Toast.LENGTH_SHORT).show(); } } }); } public void analyse (String data) { System.out.println(data); try { JSONObject json_data=new JSONObject(data); Boolean state=json_data.getBoolean("success"); String msg=json_data.getString("msg"); //登入成功 if(state) { //发送消息 Message message= new Message(); message.what=1; Bundle temp = new Bundle(); temp.putString("msg",msg); message.setData(temp); handler.sendMessage(message); } //登入失败 else { Message message= new Message(); message.what=2; Bundle temp = new Bundle(); temp.putString("msg",msg); message.setData(temp); handler.sendMessage(message); } } catch (JSONException e) { e.printStackTrace(); } } }
2.利用GET请求方式来实现人员登入
package com.dream.apm; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; public class MyActivity extends Activity { public Button start; public EditText username,password; public URL http_url; public String data; public Handler handler; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //设置全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //去除应用程序标题 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //设置竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setContentView(R.layout.main); start=(Button)findViewById(R.id.start_one); username=(EditText)findViewById(R.id.username); password=(EditText)findViewById(R.id.password); //消息处理器 handler=new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what) { //登入成功 case 1: Toast.makeText(MyActivity.this, msg.getData().getString("msg"), Toast.LENGTH_SHORT).show(); break; //登入失败 case 2: Toast.makeText(MyActivity.this, msg.getData().getString("msg"), Toast.LENGTH_SHORT).show(); break; } } }; start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //是否输入账号密码 if(username.getText().toString().length()>0&&password.getText().toString().length()>0){ //子线程可以获取UI的值,不能更改 new Thread(new Runnable() { @Override public void run() { try { //请求地址-- String url="http://10.0.2.2:8080/think/index.php/Home/Android?"+ "username=" + URLEncoder.encode(username.getText().toString(), "UTF-8") + "&password=" + URLEncoder.encode(password.getText().toString(), "UTF-8"); http_url=new URL(url); if(http_url!=null) { //打开一个HttpURLConnection连接 HttpURLConnection conn = (HttpURLConnection) http_url.openConnection(); conn.setConnectTimeout(5* 1000);//设置连接超时 conn.setRequestMethod("GET");//以get方式发起请求 //允许输入流 conn.setDoInput(true); //接收服务器响应 if (conn.getResponseCode() == 200) { InputStream is = conn.getInputStream();//得到网络返回的输入流 BufferedReader buf=new BufferedReader(new InputStreamReader(is));//转化为字符缓冲流 data=buf.readLine(); buf.close();is.close(); //判断登入结果 analyse(data); } } } catch( Exception e) { e.printStackTrace(); } } }).start(); } else { Toast.makeText(MyActivity.this, "请完整输入账号密码", Toast.LENGTH_SHORT).show(); } } }); } public void analyse (String data) { System.out.println(data); try { JSONObject json_data=new JSONObject(data); Boolean state=json_data.getBoolean("success"); String msg=json_data.getString("msg"); //登入成功 if(state) { //发送消息 Message message= new Message(); message.what=1; Bundle temp = new Bundle(); temp.putString("msg",msg); message.setData(temp); handler.sendMessage(message); } //登入失败 else { Message message= new Message(); message.what=2; Bundle temp = new Bundle(); temp.putString("msg",msg); message.setData(temp); handler.sendMessage(message); } } catch (JSONException e) { e.printStackTrace(); } } }
运行结果:
相关推荐
Guanjs0 2020-11-09
wmsjlihuan 2020-09-15
shishengsoft 2020-09-15
poplpsure 2020-08-17
CyborgLin 2020-08-15
Richardxx 2020-07-26
sunnyhappy0 2020-07-26
knightwatch 2020-07-19
wcqwcq 2020-07-04
chichichi0 2020-06-16
YAruli 2020-06-13
JF0 2020-06-13
84423067 2020-06-12
心丨悦 2020-06-11
zkwgpp 2020-06-04
stoneechogx 2020-06-04
litterfrog 2020-05-30
today0 2020-05-26