【Android】Volley做网络请求的几种用法
前言:
最近在将自己写的烂代码重构,以前使用的网络请求全是基于apache的HttpClient,简单使用还好,使用多了发现重复代码太多,而且每次使用都很繁琐,因此在网上找了半天网络请求的相关类库,最后还是确定使用Volley,于是现在记个使用笔记:
Volley几个主要功能:
1. 普通String请求:
既然使用了网络请求,那么网络权限是必不可少的,在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.INTERNET" />
因为网络请求有GET/POST两种,这里需要注意一下,调用Volley进行POST的时候提供的是getParams方法来存入键值对,所以这里使用了String... strKV来代替HashMap;
代码如下:
package com.dreamyfly.volleyexample.utils; import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest; import java.util.HashMap;
import java.util.Map; public class HttpUtils {
/**
* 使用方法:
* 1. 在相应的Activity中实现RequestQueue的实例化
* 2. 实现对应的AsyncRequestable和Executable接口
* 3. 填入get或者post的url,最后请求结果会返回在Executable的方法中
* 4. 传入的参数以String... strKVs格式传入,例: “email”, "xxx@qq.com", "password", "123456"
* 所以4中最后传入参数实际格式会变为: email=xxx@qq.com&password=123456
*/
public static void doVolleyGet(AsyncRequestable qa, String getUrl,
final Executable<String> execOnSuccess,
final Executable<VolleyError> execOnError,
final String... strKVs) {
doVolleyRequest(Request.Method.GET, qa, getUrl, execOnSuccess, execOnError, strKVs);
} public static void doVolleyPost(AsyncRequestable qa, String postUrl,
final Executable<String> execOnSuccess,
final Executable<VolleyError> execOnError,
final String... strKVs) {
doVolleyRequest(Request.Method.POST, qa, postUrl, execOnSuccess, execOnError, strKVs);
}
private static void doVolleyRequest(int requestMethod, AsyncRequestable qa, String requestUrl,
final Executable<String> execOnSuccess,
final Executable<VolleyError> execOnError,
final String... strKVs) {
StringRequest requestPost = new StringRequest(requestMethod, requestUrl, new Response.Listener<String>() {
@Override
public void onResponse(String resultStr) {
if (execOnSuccess != null) execOnSuccess.execute(resultStr);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
if (execOnError != null) execOnError.execute(volleyError);
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> map = new HashMap<String, String>();
if (strKVs != null && (strKVs.length % 2 == 0)) {
for (int i = 0; i < strKVs.length; i += 2) {
map.put(strKVs[i], strKVs[i + 1]);
}
}
return map;
}
};
// queueTag 用于调用cancelAll(queueTag)取消加入队列的请求
requestPost.setTag(qa.getQueueTag());
qa.getQueue().add(requestPost);
}
}
使用GET请求方式如下:
// 调用doVolleyGet实现GET请求
HttpUtils.doVolleyGet(new AsyncRequestable() {
@Override
public String getQueueTag() {
return null;
}
@Override
public RequestQueue getQueue() {
// 在此return mQueue以确保mQueue能够加入RequestQueue中
return mQueue;
}
}, METHOD_GET_URL, new Executable<String>() {
@Override
public void execute(String resultStr) {
// GET请求以String类型在此传出,并且可以实现UI操作,例如Toast
Toast.makeText(MainActivity.this, "GET Result: " + resultStr, Toast.LENGTH_SHORT).show();
requestResultTV.setText(String.valueOf(resultStr));
}
}, new Executable<VolleyError>() {
@Override
public void execute(VolleyError volleyError) {
// 如果访问失败,则打印Log
Log.e("VolleyError", volleyError.toString());
}
}); // StrKVs什么也不传的话参数就为null
请求结果如图:
2. Json请求:
JSON请求的JSON接口我当前使用的是国家气象局的接口:http://www.weather.com.cn/adat/sk/101010100.html (网上随便找的,能用就行),如下图:
{
weatherinfo: {
city: "北京",
cityid: "101010100",
temp: "10",
WD: "东南风",
WS: "2级",
SD: "26%",
WSE: "2",
time: "10:25",
isRadar: "1",
Radar: "JC_RADAR_AZ9010_JB",
njd: "暂无实况",
qy: "1012"
}
}
3. NetworkImageView加载Image:
相关资源:
1. 大神解析:guolin
2. 源码:
Github:https://github.com/eterrao/android-volley.git
google:https://android.googlesource.com/platform/frameworks/volley
CSDN下载jar包:
明天继续补充,今天先到这儿吧
【Android】Volley做网络请求的几种用法的更多相关文章
- 基于Android Volley的网络请求工具
基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...
- [转]Android各大网络请求库的比较及实战
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...
- Volley网络请求框架的基本用法
备注: 本笔记是参照了 http://blog.csdn.net/ysh06201418/article/details/46443235 学习之后写下的 简介: Volley是google官网退 ...
- Android 各大网络请求库的比较及实战
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...
- Android中解析网络请求的URL
近期正在做Android网络应用的开发,使用了android网络请求方面的知识.如今向大家介绍网络请求方面的知识.我们知道android中向server端发送一个请求,(这就是我们通常所说的POST请 ...
- android -------- OkGo (让网络请求更简单的框架)
项目地址:https://github.com/jeasonlzy 该库是封装了okhttp的网络框架,可以与RxJava完美结合,比Retrofit更简单易用.支持大文件上传下载,上传进度回调,下载 ...
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...
- nginx android app 慢网络请求超时
最近遇到了android 在慢网络下面请求服务器报 java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by ...
- Volley Post网络请求
/*post请求*/public void dostringVolleypost(){ /*第一步,创建请求队列*/ queue = Volley.newRequestQueue(this); /*第 ...
随机推荐
- 【Bugly干货分享】老司机教你 “飙” EventBus 3
Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. EventBus对于Android ...
- 64位进程池HashCode兼容处理
背景 net旧项目使用32位生成的HashCode,存储到数据库中.迁移到64位上,就需要对HashCode做兼容处理. 解决方案 1:进程池配置支持32位程序. 2:对Hashcode做兼容处理,[ ...
- java提高篇(十八)-----数组之一:认识JAVA数组
噢,它明白了,河水既没有牛伯伯说的那么浅,也没有小松鼠说的那么深,只有自己亲自试过才知道!道听途说永远只能看到表明现象,只有亲自试过了,才知道它的深浅!!!!! 一.什么是数组 ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- jQuery实现返回顶部
由于项目需要,写了个返回顶部的小功能... /*返回顶部*/ function toTop() { $(".to_top").hide(); $(window).scroll(fu ...
- [安卓] 16、ListView和GridView结合显示单元实现自定义列表显示效果
List在各种手机应用中都有体现,是安卓UI设计的必修课. 本文将介绍在开发中如何利用ListView和GridView设计自定义列表. 下面分别是用ListView和GridView做的效果: 上面 ...
- shell 中命令输入的快!捷!键!
非常棒!! 非常棒!! 删除ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dlctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k 删除光标后面所有字符 ...
- swift 字符串和数字相互转化
//NSString 类型 转为整型,浮点型, var test:NSString = "3.3" println("test\(test)") println ...
- Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
- 容器使用的12条军规——《Effective+STL中文版》试读
容器使用的12条军规——<Effective+STL中文版>试读 还 记的自己早年在学校学习c++的时候,老师根本就没有讲STL,导致了自己后来跟人说 起会C++的时候总是被鄙视, ...