Volley请求的编写


前提

索引文章 中我提到过,我们用Volley来写Android客户端请求,这篇文章将介绍Volley请求的编写。学习这篇文章,首先需要你较熟练地掌握Java语言,然后至少对Android程序有少许的编写经验(会写类似按钮点击事件的功能就行)。


IDE

IDE没的说,主流的Android开发IDE只有Eclipse 和 Android Studio,且这两个IDE都是Google开发的。Google在放出Android Studio正式版之后就宣布了停止对Eclipse的维护。那么我们选择Android Studio。

另外插一句,Android Studio可以导入Eclipse程序(反向是不行的),导入的过程中它会自动把ADT体系替换成Gradle体系,还在用Eclipse的Android开发者抓紧跟上官方新IDE的步伐吧。


战斗前的准备

①创建一个Android项目

创建项目这种“傻瓜式”操作我不想多说,唯一想请大家注意的是最小SDK的选择这部分。不需要选太低,可以看我用红色方框圈中的那个百分比数字。一般选择4.4(API 19),根据官方的统计,90.1%的Android设备的API都大于19。这就意味着,你写出来的程序可以在90.1%的Android设备上运行。

最小SDK的选择

②导入volley包

volley是Google官方开发的用于Android请求的Java包,并不直接包含在JDK中。因此,我们需要在自己的项目中导入它。
首先,点击Android->Gradle Scripts->build.gradle(Moudle: app), 打开gradle脚本。

打开APP Gradle

接着,在编辑窗口中,找到最下面的dependencies代码块,在那一堆compile后面加上一行:

//Volley
compile 'com.mcxiaoke.volley:library:1.0.19'

导入Volley

在对gradle文件进行任何修改后,上方都会出现一行同步的提示,点击Sync Now进行同步即可(此时Android Studio会自动下载这个包,然后放到该放的地方,只需等待即可)

Gradle同步

③声明网络权限

在项目的app -> manifests下找到AndroidManifest.xml文件
Manifest文件

在manifest标签中添上以下代码:

<uses-permission android:name="android.permission.INTERNET" />

添完之后Manifest文件里的格式是这样的:
网络权限


发送请求!

此时进入这篇文章最关键的地方,你需要写一个这样的函数:

public static void LoginRequest(final String accountNumber, final String password) {
        //请求地址
        String url = "http://域名:端口号/MyFirstWebApp/LoginServlet";    //注①
        String tag = "Login";    //注②

        //取得请求队列
        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

        //防止重复请求,所以先取消tag标识的请求队列
        requestQueue.cancelAll(tag);

        //创建StringRequest,定义字符串请求的请求方式为POST(省略第一个参数会默认为GET方式)
        final StringRequest request = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = (JSONObject) new JSONObject(response).get("params");  //注③
                            String result = jsonObject.getString("Result");  //注④
                            if (result.equals("success")) {  //注⑤
                                //做自己的登录成功操作,如页面跳转
                            } else {
                                //做自己的登录失败操作,如Toast提示
                            }
                        } catch (JSONException e) {
                            //做自己的请求异常操作,如Toast提示(“无网络连接”等)
                            Log.e("TAG", e.getMessage(), e);
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //做自己的响应错误操作,如Toast提示(“请稍后重试”等)
                Log.e("TAG", error.getMessage(), error);
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("AccountNumber", accountNumber);  //注⑥
                params.put("Password", password);
                return params;
            }
        };

        //设置Tag标签
        request.setTag(tag);

        //将请求添加到队列中
        requestQueue.add(request);
    }

注释①: 域名和端口号要和花生壳中设置的一样;“MyFirstWebApp”是你的服务器端Java Web项目的名字;“LoginServlet”是上述项目中处理登录请求的Servlet的名字(不必加“.java”)。

注释②: 这个Tag的名字原则上应该是对你这个请求的简单概括,可以随便写。

注释③:
注释④:
注释⑤: 这三个地方是在一层一层解析服务器端传回的Json字符串,每一步都是按键取值操作,String型的键需要和Java Web项目中对应的Servlet里写的一模一样,区分大小写,不然会发生解析错误!!!

注释⑥: 这里是给请求中填充要附带的数据。和上面三个注释处类似,全都是按键存值操作,Java Web项目中对应的Servlet里获取请求中的数据时,String型的键需要和这里的一模一样,区分大小写,不然会取到空值!!!

Ok,按照上面的模板和注释DIY好了自己的Volley请求之后,调用这个函数并传入相应的值就可以向服务器发送HTTP请求了。

在本文中若遇到不懂的东西,请回到最上面,点击那个链接去看索引文章。


后记

客户端的Volley请求函数和服务器端Java Web Servlet应该是一一对应的,想实现别的功能时(如注册功能),照猫画虎把这两端的代码都写好(关键是两边键的名称和数据封装结构的一致性)就行了。

今天有人在编码的过程中出现了未添加权限的异常然后问我,我才发现在这篇帖子中忘了写Manifest文件中权限声明的部分,因此添上了“战斗前的准备”里面的第③步。
——2018.02.09

评论 135
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IMplementist

你的鼓励,是我继续写文章的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值