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(); } } }
运行结果:
相关推荐
本篇将详细讲解Android中如何使用HTTPS进行GET和POST请求。 首先,HTTPS基于SSL/TLS协议,提供加密处理、服务器身份验证和消息完整性检查等功能。在Android中,我们通常会用到HttpURLConnection或者第三方库如...
在Android应用开发中,发起POST网络请求是与服务器交互的重要环节。Android Studio作为官方推荐的集成开发环境(IDE),提供了丰富的工具和库来简化这一过程。本文将详细讲解如何在Android Studio中使用Java语言和...
以上就是关于Android的OkHttp3框架中GET和POST请求的基本使用方法,通过这个库,开发者可以高效、安全地进行网络通信。在实际项目中,可以根据需求进行更复杂的定制和优化,例如设置超时、重试策略等。希望这个概述...
在Android开发中,POST请求是常见的网络数据交互方式,它用于向服务器发送数据,比如登录信息、表单数据等。本篇文章将详细讲解如何在Android应用中实现POST请求,获取JSON内容并进行解析。 首先,我们需要引入网络...
在Android开发中,进行网络通信是常见的需求,而POST请求是一种常用的数据提交方式。本教程将深入探讨如何在Android原生环境中实现POST请求,并通过源码解析来理解其工作原理。 首先,Android中的网络操作主要依赖...
在Android开发中,进行HTTP请求是常见的操作,用于与服务器进行数据交互。本文将深入探讨如何在Android中实现简单的HTTP请求,并解决可能出现的乱码问题。 首先,Android平台提供了多种方式来执行HTTP请求,其中最...
Android原生提供了HttpURLConnection类来处理HTTP请求。下面是一个简单的GET请求示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import ...
在Android开发中,POST和GET是两种主要的HTTP请求方法,用于从服务器获取数据或向服务器发送数据。本文将深入探讨这两种方法的工作原理、应用场景以及如何在Android中实现它们。 一、POST与GET方法的区别 1. 工作...
在Android应用开发中,与服务器进行数据交互是必不可少的一部分,主要通过HTTP协议的GET和POST方法来实现。本文将深入探讨这两种请求方式以及如何在Android中利用第三方库android-async-http-master实现它们。 首先...
android发送get,post请求工具类
在Android中,我们可以使用HttpURLConnection或OkHttp库来发送HTTP请求。以下是使用HttpURLConnection的示例: ```java URL url = new URL("http://example.com/api"); HttpURLConnection connection = ...
本篇文章将详细探讨如何在Android中实现异步HTTP请求,主要涉及POST和GET两种方法。 首先,我们要理解异步请求的基本概念。异步HTTP请求意味着在后台线程中执行网络操作,而不影响用户界面的流畅性。当请求完成时,...
在Android开发中,与服务器进行数据交互是必不可少的,其中HTTP的POST请求是最常见的数据提交方式之一。本篇文章将深入探讨如何在Android应用中发送POST请求,并解析返回的JSON字符串。 首先,我们要理解POST请求的...
在Java服务器端,通常会使用如Spring Boot、Jersey或Spark等框架来接收和处理这些HTTP请求。对于GET请求,可以直接从请求参数中获取数据;对于POST请求,数据通常会出现在请求体中,需要解析为JSON对象。 七、数据...
本实例将详细介绍如何在Android环境中使用HttpPost请求连接服务器,并处理相关的异常情况,如网络连接状态判断和请求超时。 首先,我们需要在Android应用中引入必要的库,通常我们会使用Apache HttpClient库来实现...
本文将详细介绍Android中的四种主要HTTP请求方式:GET、POST、HttpClient以及OkHttp,并探讨它们的应用场景和优缺点。 一、GET请求 GET是最常见的HTTP请求方法,主要用于获取资源。它将请求参数附加到URL后面,以...
首先,创建一个`HttpClient`实例,这将是发送HTTP请求的基础: ```java HttpClient httpClient = new DefaultHttpClient(); ``` ## 4. 设置请求参数 创建`HttpGet`对象来表示GET请求,并设置URL: ```java HttpGet ...
Android Webview 拦截 Ajax 请求的详细讲解 Android Webview 提供了页面加载及资源请求的钩子,但是对于 H5 的 Ajax 请求并没有提供干涉的接口。这意味着我们不能在 Webview 中干涉 JavaScript 发起的 HTTP 请求,...
- **同步与异步请求**:`khttp`支持同步和异步的HTTP请求,这对于Android应用来说非常关键,因为异步请求可以避免阻塞UI线程。 - **多种HTTP方法**:包括GET、POST、PUT、DELETE等,满足各种网络操作需求。 - **...
简单方便的android 端http get 和post 请求 测试端口数据用