Volley 是一个提供给 Android 应用非常易用的网络库,更好的是这个库还加快了网络访问速度。本文会总览Volley库的主要功能,包括工作原理、常见工作模式以及如何使用该库从网络上并行加载缩略图到应用ListView中的流程。
Volley是 AsyncTask 的绝佳替代品。对于Android开发者来说,为了做好ListView和网络服务请求我们在AsyncTask上花了太多的时间。最近,我读了一篇关于AsyncTask非常棒的文章,我建议每一个 Android 开发者都去读一下+Fré Dumazy的 “Dark Side of AsyncTask”。AsyncTask 简直成为了所有项目中的冗余。多亏了Volley 这个框架,现在我们可以有效地减少在 AsyncTasks上花费的编码时间和精力了。
这篇文章演示了一个非常简单的 Volley的示例。例子中的VolleyTest 应用会从Yahoo Pipe上获取 JSON 文章数据并且显示在 ListView 中。
第一步: 从 Git 仓库把 Vollery 库克隆下来
1 2 |
; html-script: false ] git clone https://android.googlesource.com/platform/frameworks/volley |
第二步: 在 Android Studio 中新建一个叫 “VolleyTest” 的项目
第三步: 将 Volley 的库源文件拷贝到 “VolleyTest”的项目中,在这里复制源码是最安全和简单的方法。
第四步: 在 AndroidManifest.xml 中添加网络权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
; html-script: false ] <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.kpbird.volleytest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="14" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.kpbird.volleytest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest> |
第五步: 在 activity_main.xml 中添加一个 ListView
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
; html-script: false ] <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/listView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true"/> </RelativeLayout> |
第六步: 为 ListView 的行布局新建一个“row_listview.xml”
1 2 |
; html-script: false ] git clone https://android.googlesource.com/platform/frameworks/volley |
第二步: 在 Android Studio 中新建一个叫 “VolleyTest” 的项目
第三步: 将 Volley 的库源文件拷贝到 “VolleyTest”的项目中,在这里复制源码是最安全和简单的方法。
第四步: 在 AndroidManifest.xml 中添加网络权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
; html-script: false ] <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.kpbird.volleytest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="14" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.kpbird.volleytest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest> |
第五步: 在 activity_main.xml 中添加一个 ListView
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
; html-script: false ] <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/listView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true"/> </RelativeLayout> |
第六步: 为 ListView 的行布局新建一个“row_listview.xml”