前言

  最近在将自己写的烂代码重构,以前使用的网络请求全是基于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做网络请求的几种用法的更多相关文章

  1. 基于Android Volley的网络请求工具

    基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...

  2. [转]Android各大网络请求库的比较及实战

    自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...

  3. Volley网络请求框架的基本用法

    备注: 本笔记是参照了 http://blog.csdn.net/ysh06201418/article/details/46443235  学习之后写下的 简介:  Volley是google官网退 ...

  4. Android 各大网络请求库的比较及实战

    自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...

  5. Android中解析网络请求的URL

    近期正在做Android网络应用的开发,使用了android网络请求方面的知识.如今向大家介绍网络请求方面的知识.我们知道android中向server端发送一个请求,(这就是我们通常所说的POST请 ...

  6. android -------- OkGo (让网络请求更简单的框架)

    项目地址:https://github.com/jeasonlzy 该库是封装了okhttp的网络框架,可以与RxJava完美结合,比Retrofit更简单易用.支持大文件上传下载,上传进度回调,下载 ...

  7. kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式

    今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图: Retrofit是Square公司开发 ...

  8. nginx android app 慢网络请求超时

    最近遇到了android 在慢网络下面请求服务器报 java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by ...

  9. Volley Post网络请求

    /*post请求*/public void dostringVolleypost(){ /*第一步,创建请求队列*/ queue = Volley.newRequestQueue(this); /*第 ...

随机推荐

  1. Zabbix日志监视的汇总报警(更新发送邮件脚本)

    Zabbix的用户一定会碰到这种情况: 日志报警一般设置的是multiple模式,有错误大量写入的时候,每写入一行就会触发一次action,导致出现大量的报警邮件. 特别是ora的报警,经常一出就是上 ...

  2. JAVA缓存技术

    介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI技术,让Java代码可以实时的监控制定文件夹内文件的变动信息,支持Linux/Windows/MacOS ...

  3. LIstView 滚动 异步 加载更多 mono for android ScrollStateChanged ScrollState.Idle; Fling;TouchScroll

    今天项目需要实现一下列表的分页加载 找到了Listview的ScrollStateChanged方法. 和大家分享一下 //先找到Listview ListView order = FindViewB ...

  4. 设计模式之美:Role Object(角色对象)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Role Object 的示例实现. 意图 通过明确地附加角色对象到目标对象中,以使对象可以适配不同的客户需求.每个角色对象都代 ...

  5. 程序员必须知道的几个Git代码托管平台

    上一篇博客中2015继续任性——不会Git命令,照样玩转Git我们简单的介绍了在VS2013中使用Git,和GitHub客户端的使用.那么使用Git到底有什么好处呢?最为明显的是支持Git代码托管的平 ...

  6. Programming Erlang 学习笔记(一)

    入门 启动Shell 在cmd中输入命令”erl”,百分号(%)表示一个注释的开始,从百分号开始到这行结束的所有文本都被看做是注释. 一个完整的命令需要以一个句点和一个回车结束. 退出erlang的命 ...

  7. HTML5 history API实践

    一.history API知识点总结 在HTML4中,我们已经可以使用window.history对象来控制历史记录的跳转,可以使用的方法包括: history.forward();//在历史记录中前 ...

  8. Smack Message扩展,添加自定义元素(标签)经验分享

    Smack框架对XMPP协议进行了封装,从而方便与Openfire即时通信服务器做交互.说白了,Smack框架可以通过对象构造符合XMPP协议的XML字符串,避免手动拼接字符串. XMPP协议基本XM ...

  9. 在github上写个人简历——最简单却又不容易的内容罗列

    前篇博客分享了一下自己初入github的过程,傻瓜式一步步搭建好主页后,终于该做正事儿了——写简历.在脑袋中构思了很多版本,最后终于决定,先写一个最传统的版本,于是我在箱子中翻出我word版本的简历, ...

  10. 谨慎DateTime.Now在EF的query中的使用

    执行如下代码: var query = from tr in _carrierRepository select new BaseCarrier { CarrierCode = tr.CarrierC ...