`
hm4123660
  • 浏览: 282874 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Dea4ce76-f328-3ab2-b24a-fb268e1eeb75
数据结构
浏览量:70117
社区版块
存档分类
最新评论

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

 

 

运行结果:



 

 



 

 

2
2
分享到:
评论

相关推荐

    Android中Https请求get和post

    本篇将详细讲解Android中如何使用HTTPS进行GET和POST请求。 首先,HTTPS基于SSL/TLS协议,提供加密处理、服务器身份验证和消息完整性检查等功能。在Android中,我们通常会用到HttpURLConnection或者第三方库如...

    Android Studio发起POST网络请求

    在Android应用开发中,发起POST网络请求是与服务器交互的重要环节。Android Studio作为官方推荐的集成开发环境(IDE),提供了丰富的工具和库来简化这一过程。本文将详细讲解如何在Android Studio中使用Java语言和...

    android 的OkHttp3网络的POST和GET请求

    以上就是关于Android的OkHttp3框架中GET和POST请求的基本使用方法,通过这个库,开发者可以高效、安全地进行网络通信。在实际项目中,可以根据需求进行更复杂的定制和优化,例如设置超时、重试策略等。希望这个概述...

    android的post请求

    在Android开发中,POST请求是常见的网络数据交互方式,它用于向服务器发送数据,比如登录信息、表单数据等。本篇文章将详细讲解如何在Android应用中实现POST请求,获取JSON内容并进行解析。 首先,我们需要引入网络...

    android原生post请求源码

    在Android开发中,进行网络通信是常见的需求,而POST请求是一种常用的数据提交方式。本教程将深入探讨如何在Android原生环境中实现POST请求,并通过源码解析来理解其工作原理。 首先,Android中的网络操作主要依赖...

    简单的android http请求

    在Android开发中,进行HTTP请求是常见的操作,用于与服务器进行数据交互。本文将深入探讨如何在Android中实现简单的HTTP请求,并解决可能出现的乱码问题。 首先,Android平台提供了多种方式来执行HTTP请求,其中最...

    Android Studio发起GET网络请求

    Android原生提供了HttpURLConnection类来处理HTTP请求。下面是一个简单的GET请求示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import ...

    android基础 - POST GET

    在Android开发中,POST和GET是两种主要的HTTP请求方法,用于从服务器获取数据或向服务器发送数据。本文将深入探讨这两种方法的工作原理、应用场景以及如何在Android中实现它们。 一、POST与GET方法的区别 1. 工作...

    Android总GET/POST请求服务器

    在Android应用开发中,与服务器进行数据交互是必不可少的一部分,主要通过HTTP协议的GET和POST方法来实现。本文将深入探讨这两种请求方式以及如何在Android中利用第三方库android-async-http-master实现它们。 首先...

    android发送get,post请求工具类

    android发送get,post请求工具类

    android 后台 get和post请求数据

    在Android中,我们可以使用HttpURLConnection或OkHttp库来发送HTTP请求。以下是使用HttpURLConnection的示例: ```java URL url = new URL("http://example.com/api"); HttpURLConnection connection = ...

    android异步http请求

    本篇文章将详细探讨如何在Android中实现异步HTTP请求,主要涉及POST和GET两种方法。 首先,我们要理解异步请求的基本概念。异步HTTP请求意味着在后台线程中执行网络操作,而不影响用户界面的流畅性。当请求完成时,...

    android发送post请求获取json字符串

    在Android开发中,与服务器进行数据交互是必不可少的,其中HTTP的POST请求是最常见的数据提交方式之一。本篇文章将深入探讨如何在Android应用中发送POST请求,并解析返回的JSON字符串。 首先,我们要理解POST请求的...

    Volley使用,包含get、post请求,获取String/JsonObject/JsonArray数据(android客户端+java服务器端)

    在Java服务器端,通常会使用如Spring Boot、Jersey或Spark等框架来接收和处理这些HTTP请求。对于GET请求,可以直接从请求参数中获取数据;对于POST请求,数据通常会出现在请求体中,需要解析为JSON对象。 七、数据...

    android HttpPost请求连接服务器端的实例

    本实例将详细介绍如何在Android环境中使用HttpPost请求连接服务器,并处理相关的异常情况,如网络连接状态判断和请求超时。 首先,我们需要在Android应用中引入必要的库,通常我们会使用Apache HttpClient库来实现...

    android Http请求

    本文将详细介绍Android中的四种主要HTTP请求方式:GET、POST、HttpClient以及OkHttp,并探讨它们的应用场景和优缺点。 一、GET请求 GET是最常见的HTTP请求方法,主要用于获取资源。它将请求参数附加到URL后面,以...

    Http(get)请求数据Android Studio使用HttpClient

    首先,创建一个`HttpClient`实例,这将是发送HTTP请求的基础: ```java HttpClient httpClient = new DefaultHttpClient(); ``` ## 4. 设置请求参数 创建`HttpGet`对象来表示GET请求,并设置URL: ```java HttpGet ...

    实例详解Android Webview拦截ajax请求

    Android Webview 拦截 Ajax 请求的详细讲解 Android Webview 提供了页面加载及资源请求的钩子,但是对于 H5 的 Ajax 请求并没有提供干涉的接口。这意味着我们不能在 Webview 中干涉 JavaScript 发起的 HTTP 请求,...

    Android-KotlinHTTP请求库与Pythonrequests类似

    - **同步与异步请求**:`khttp`支持同步和异步的HTTP请求,这对于Android应用来说非常关键,因为异步请求可以避免阻塞UI线程。 - **多种HTTP方法**:包括GET、POST、PUT、DELETE等,满足各种网络操作需求。 - **...

    android 平台 Http ge和post请求工具

    简单方便的android 端http get 和post 请求 测试端口数据用

Global site tag (gtag.js) - Google Analytics