本人水平有限,文章中如果出现什么不正确或者模糊的地方,还请各位小伙伴留下评论,多多指教 : )
概述
*android与服务器之间的交互,有两种方式,一种为POST,一种为GET。
*GET方式通过URL传递参数,例如:
http://192.168.1.147/register.php?name=123&pwd=123
*POST方式通过封装数据实体进行交互
关于POST与GET之间区别
1.POST与GET都可以像服务器发送请求,但是GET是通过URL传递参数的,所以像name和password这种涉及用户信息的参数,使用GET进行传递是不安全的。而POST是将数据进行封装,然后再传输。所以,一般来说GET适用于从服务器获取数据,而POST适合向服务器发送数据。
2.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
3. 对于get方式,服务器若使用的是PHP,则通过$_GET[]
获取变量的值,对于post方式,服务器端用$_POST[]
获取提交的数据。$_GET和$_POST
可以理解为数组,每一个传递过来的参数都会存在相应的数组当中。$_POST
和$_GET
存储的变量,全部都会存储在$_REQUEST
队列当中。
4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
POST与GET的使用建议
综上,在使用POST和GET时的建议为:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
栗子 数据发送
准备工作
wampServer
在正式开始编写这个例子之前,我们需要将本地的电脑作为服务器使用,这里推荐使用wamppServer或者xampp这种集成化的开发环境,其中包含了Apache及mysql等服务端开发的常用组建,非常方便。
我这里使用的是wampServer,大家自行去下载就好了。
下载完毕后,双击图标运行,在桌面的右下角会出现一个wampServer的icon。
要想测试自己的本地服务端是否配置成功,只需在浏览器里输入http://127.0.0.1(http://localhost/)或者本机的IP地址。上述不论那种方法,最后都会显示相同的页面。
这里解释说明一下两种访问wampServer的方式。通过127.0.0.1(localhost)的方式,是通过本地回环地址地址去访问的,后者(本机IP)是在网络中去访问这台主机。
在正式开发过程当中,android端的url需要使用第二种写法。
然后左键单击icon,会弹出一个菜单,然后点击www目录,此目录,我们把需要的服务端脚本文件(PHP、Python、java等语言编写的文件)放在此目录里就可以了
这里我们做一个简单的测试。创建一个hello.txt文件,里面的代码如下:
<?php
echo 'hello php';
简单地输出一句话,把.txt的后缀改为.php,即hello.php,然后在浏览器里面去打开这个文件,在浏览器里输入如下的url:
此时显示的页面为:
至此wampServer的安装完毕。当然在安装过程中可能还会遇到其他问题,最常见的可能就是wampServer当中的Apache使用的端口号与虚拟机使用的端口号冲突,解决办法各位小伙伴自行百度吧,不是难的问题。
服务端脚本文件
所谓服务端的脚本文件,即用来处理用户发送请求,与服务器进行交互,并将服务器的数据反馈给用户的一类文件。脚本文件只是一个广泛的概念,能够作为服务器脚本的编程语言由很多种,比如PHP,Python,Java Web等,这里我使用的是PHP。
推荐一款PHP的编辑器Zend Studio,当然喜欢轻量级编辑器的小伙伴可以去用用sublime
接下来就是处理adnroid客户端发送来数据的PHP文件,代码如下
getInfo.php
<?PHP
if(isset($_REQUEST['name'])&&isset($_REQUEST['age'])){
$name=$_REQUEST['name'];
$age=$_REQUEST['age'];
echo $name.'|'.$age;
}
这是一段比较简单的PHP代码,首先判断Request队列中是否有name和age的字段,如果有,对其赋值,然后将name和age的值打印出来。有PHP基础的小伙伴看这段代码应该是非常轻松的。
然后我们通过Url的方式传递参数进去。在浏览器里输入:
可以看到浏览器接收到了通过url GET的参数name和age,并且显示在了页面上
至此我们的服务器端就已经配置好了。
android 客户端编写
通过GET方式向服务器发送数据
描述:android作为客户端通过HttpUrlConnection,设置请求方式为GET,然后发送信息给服务器,服务器接收到消息后返回特定信息给android客户端并显示。
我们上节的HTTP讲解当中使用的是HttpUrlConnection进行HTTP通信的,现在我们使用一个便捷的框架——Volley。大家可以先去看看这个教程— Android Volley完全解析,在以后使用开发过程当中,肯定会大量用到网络操作。
接下来我们来编写android端的代码
public class MainActivity extends AppCompatActivity {
private TextView textView;
private RequestQueue requestQueue;
private EditText et_name;
private EditText et_age;
private Button bt_send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.response);
et_name = (EditText) findViewById(R.id.et_name);
et_age = (EditText) findViewById(R.id.et_age);
bt_send = (Button) findViewById(R.id.bt_send);
//请求队列对象
requestQueue = Volley.newRequestQueue(this);
bt_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//get方式的url
String urlGet="http://192.168.1.222/getInfo.php?name="+et_name.getText().toString()+"&age="+
et_age.getText().toString();
StringRequest request=new StringRequest(urlGet, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
textView.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("--TAG--", error.getMessage(), error);
}
});
requestQueue.add(request);
}
});
}
}
注意上面的urlGet,要把localhost换成本机的ip地址,并且android设备要和你的电脑处于同一局域网当中。
用户输入name和age,发送给getInfo.php,然后脚本文件echo 出来,android端接受
是不是感觉使用了框架之后的网络操作就非常简单了~但是在前期,不建议大家使用框架,因为这样不利于我们去了解android的网络通信机制,在后期网络操作的工作过程能做到轻车熟就时,再使用框架也不迟。