Android - 使用Volley请求网络数据
Android - 使用Volley请求网络数据
Android L ; Android Studio 14
个人使用volley的小记,简述使用方法,不涉及volley源码
准备工作
导入Volley.jar包:我使用的是现成的jar包,将其放到app/libs目录下即可
网上可以下载到Volley.jar包
使用volley源代码
从github上pull一个下来
git pull https://github.com/mcxiaoke/android-volley.git
把这个文件夹放到工程中,与app目录同级
ImportTest/
├── app
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── ImportTest.iml
├── local.properties
├── settings.gradle
└── volley
在android studio中,编辑ImportTest/settings.gradle,加入':volley'
include ':app',':volley'
编辑ImportTest/app/build.gradle;在dependencies中加入compile project(':volley')
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':volley')//加进来
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}
同步一下gradle;可能会错:Gradle sync failed: SSL peer shut down incorrectly
找到这个地方volley/build.gradle,注释掉这两句
//apply from: 'https://raw.github.com/mcxiaoke/gradle-mvn-push/master/jar.gradle'
//apply from: 'https://raw.github.com/mcxiaoke/gradle-mvn-push/master/gradle-mvn-push.gradle'
使用volley
导入jar包已经完成,接下来需要:
- 申请网络权限
<uses-permission android:name="android.permission.INTERNET"/> - 建立网络请求队列 RequestQueue
- 准备Url
- 请求数据
主要代码在VolleyTest.java中,新建了一个LinearLayout来显示数据
加载String,图片,JSON数据;能够实现异步加载网络图片
VolleyTest.java
/* 用于显示的控件 */
cityName = (TextView) findViewById(R.id.city_name);
temper = (TextView) findViewById(R.id.temper);
weatherType = (TextView) findViewById(R.id.weather_type);
webText = (TextView) findViewById(R.id.web_text);
cat = (ImageView) findViewById(R.id.image_cat);
wallpaper = (NetworkImageView) findViewById(R.id.image_wallpaper);
/* 0.准备url,放到HashMap中备用 */
Map<String, String> sourceUrl = new HashMap<>();/* store url */
sourceUrl.put("beijing", "http://www.weather.com.cn/adat/cityinfo/101010100.html");
sourceUrl.put("cat_earphone", "http://pic.cnblogs.com/avatar/706293/20150628195334.png");
sourceUrl.put("wallpaper0010",
"http://s.cn.bing.net/az/hprichbg/" +
"rb/MaroonBellsVideo_ZH-CN9667920788_1920x1080.jpg");
/* 1.建立RequestQueue */
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());/* context */
/* 2.请求JSON文件;这里利用的是天气预报接口 */
JsonObjectRequest jsonRequest = new JsonObjectRequest(sourceUrl.get("beijing"), null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
Log.d("rust", jsonObject.toString());
/* 2.1处理JSON文件 */
try {
JSONObject weather = jsonObject.getJSONObject("weatherinfo");
cityName.setText(weather.getString("city"));
StringBuilder temperRange = new StringBuilder();
temperRange.append(weather.getString("temp1"));
temperRange.append(" ~ ");
temperRange.append(weather.getString("temp2"));
temper.setText(temperRange.toString());
weatherType.setText(weather.getString("weather"));
} catch (JSONException e) {
e.printStackTrace();
cityName.setText("ERROR");
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("rust", volleyError.toString());
}
});
/* 不要忘记添加到队列中 */
requestQueue.add(jsonRequest);/* add to request queue */
/* 3.请求网络图片 */
ImageRequest catRequest = new ImageRequest(sourceUrl.get("cat_earphone"),
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
cat.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.RGB_565,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("rust", volleyError.toString());
}
}
);
requestQueue.add(catRequest);/* add to request queue */
/* 3.1异步加载图片 */
ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());
ImageLoader.ImageListener listener = ImageLoader.getImageListener(
wallpaper, R.drawable.orange01, R.drawable.orange02
);/* ImageView,默认显示图片,加载失败后显示的图片*/
imageLoader.get(sourceUrl.get("wallpaper0010"), listener, 400, 400);/* 可指定图片最大尺寸 */
wallpaper.setImageUrl(sourceUrl.get("wallpaper0010"), imageLoader); /* 显示图片 */
/* 4.获取文本,以获取网站文本为例 */
StringRequest stringRequest = new StringRequest(
"http://www.cnblogs.com/",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
webText.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
requestQueue.add(stringRequest);
BitmapCache.java
import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader;
public class BitmapCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;/* 10M */
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
final
Volley是一个不错的网络框架,源代码可以在frameworks/volley中找到
这里的代码仅仅是实现功能;具体使用中会发现,解析JSON时可能会出现乱码,受网络影响JSON可能加载很慢
Android - 使用Volley请求网络数据的更多相关文章
- 解决Volley请求网络数据返回的数据乱码
本人可参考http://tieba.baidu.com/p/4039693566 以往一般我们如下写就可以了 StringRequest request=new StringRequest(url, ...
- Android训练课程(Android Training) - 使用Volley传输网络数据(Transmitting Network Data Using Volley)
使用Volley传输网络数据(Transmitting Network Data Using Volley) Volley 是一个 HTTP 库,它使得在Android应用程序中操作网络更容易,是重要 ...
- Android 手机卫士--构建服务端json、请求网络数据
本文地址:http://www.cnblogs.com/wuyudong/p/5900384.html,转载请注明源地址. 数据的传递 客户端:发送http请求 http://www.oxx.com/ ...
- Android利用Fiddler进行网络数据抓包
最新最准确内容建议直接访问原文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信 ...
- Android利用Fiddler进行网络数据抓包,手机抓包工具汇总
Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...
- Android利用Fiddler进行网络数据抓包,手机抓包工具汇总,使用mono运行filddler
Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...
- react-native 项目实战 -- 新闻客户端(4) -- 请求网络数据
1.Home.js /** * 首页 */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Te ...
- Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...
- [Android Traffic] 让android应用在传输网络数据的时候更省电
到今年6月,我国的手机网民已经达到了3.88亿,超过了电脑终端.相信有智能机的同学都用过手机上网冲浪.但是手机的电量很快被用光了恐怕是每个人都不能忍受的一件事情.而打开数据连接进行网络数据的传输是很耗 ...
随机推荐
- 一天搞定CSS:盒模型content、padding、border、margin--06
1.盒模型 网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物 ...
- JavaSE教程-02Java基本语法-练习
请说出下面的运算结果及解释为什么 System.out.println(1+1+"1");//? System.out.println("1"+1+1);//? ...
- html、css和js注释的规范用法
成为专业的前端工程师!!! html注释: <!--注释内容--> css注释: //注释内容 单行注释(不推荐使用,因为有的浏览器可能不兼容,没有效果)/*注释内容*/ 多行注释(推荐使 ...
- Android Studio 工具栏添加常用按钮
本文中 Android Studio 的版本为 android Studio 2.2 ,操作系统为 Windows,如有操作不同,可能是版本差异.在工具栏中添加一些常用的按钮,如设置.DDMS,有利于 ...
- Caused by: java.lang.RuntimeException: by java.lang.OutOfMemoryError: PermGen space(tomcat 启动时提示内存溢出)
设置MaxPermSize大小TOMCAT_HOME/bin/catalina.bat 文件头加set JAVA_OPTS='-Xms512m -Xmx1024m -XX:MaxPermSize=51 ...
- .NET 开发环境搭建
概述 在接下来的时间里,将会入手ASP.NET MVC这一专题,尽量用最快的时间,最有效的方法,分别从深度和广度上剖析这一专题,力求讲明白.讲透.以此来与大家分享,力求达到共同学习,共同交流,共同进步 ...
- OFFICE 文档转换为html在线预览
OFFICE 文档在线预览方案很多: 服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览,比如flexpaper Office文档直接转换为SWF,通过网页加载Flash预览 微软的 ...
- docker 汇总
整理中 ... 一. docker 基础 配置参数最佳实践 二. docker 编排工具 docker swarm mesos kubernetes AWS ECS 三. docker 生态 dock ...
- 关于java中使用数组的几点理解笔记
1.数组元素就是变量: 2.在已有数据类型之后加方括号[],就会产生一个新的数组类型: 分两类:1)基本数据类型,如:int[],string[]; 2)引用数据类型,如:Person[](类): 3 ...
- JAVA优雅停机的实现
最近在项目中需要写一个数据转换引擎服务,每过5分钟同步一次数据.具体实现是启动engine server后会初始化一个ScheduledExecutorService和一个ThreadPoolExec ...