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();
        }
    }
}

 

运行结果:



 



 

猜你喜欢

转载自longpo.iteye.com/blog/2208831
今日推荐