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();
- }
- }
- }
复制代码
运行结果:
|