博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android - 使用Volley请求网络数据
阅读量:6260 次
发布时间:2019-06-22

本文共 6436 字,大约阅读时间需要 21 分钟。

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
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
() { @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
() { @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
() { @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
mCache; public BitmapCache() { int maxSize = 10 * 1024 * 1024;/* 10M */ mCache = new LruCache
(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可能加载很慢

你可能感兴趣的文章
《洛克菲勒留给儿子的38封信》 第五封:要有竞争的决心
查看>>
STL vector vs list function comparison:
查看>>
应用服务器和web server 的区别
查看>>
Libevent笔记
查看>>
mycelipse之安装SVN1.6.5(转载)
查看>>
怎样把数据汇到Excel中的心得经验
查看>>
状态键盘完美适应iOS中的键盘高度变化
查看>>
Linux下oracle11g 导入导出操作详细
查看>>
每日英语:When Computer Games May Keep The Brain Nimble
查看>>
Android AsyncTask运作原理和源码分析
查看>>
demos.jquerymobile
查看>>
【Android】解决Android横竖屏切换数据丢失问题的方法
查看>>
spring+mybatis的多源数据库配置实战
查看>>
Oracle 导入外部文件数据库
查看>>
数值压缩存储方法Varint
查看>>
【转】Unity3.5 GameCenter基础教程
查看>>
C#_Profile 配置
查看>>
WCF和ASP.NET Web API在应用上的选择
查看>>
关于空指针NULL、野指针、通用指针
查看>>
从GIMP的Retinex算法里发现了一种高斯模糊的快速实现方法【开发记录】。
查看>>