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