編輯:關於Android編程
本文github地址:
https://github.com/YoungBear/MyBlog/blob/master/VolleyLearn.md
Volley是Android下個一個網絡請求庫,它可以讓Android下的網絡訪問更加簡單和快速。默認情況下,Volley都是異步訪問網絡的,所以我們不必擔心異步處理問題。
在build.gradle中添加dependency:
dependencies {
...
compile 'com.android.volley:volley:1.0.0'
}
使用源代碼,作為一個library project。
git clone https://android.googlesource.com/platform/frameworks/volley
另外,也可以在源代碼中導出jar包,使用jar包作為庫。
首先,在AndroidManifest.xml中添加網絡訪問權限,
//VolleyController.java
public class VolleyController {
public static final String TAG = VolleyController.class.getSimpleName();
private static volatile VolleyController mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mContext;
private VolleyController(Context context) {
mContext = context.getApplicationContext();
mRequestQueue = Volley.newRequestQueue(mContext);
mImageLoader = new ImageLoader(mRequestQueue, new LruBitmapCache());
}
public static VolleyController getInstance(Context context) {
if (mInstance == null) {
synchronized (VolleyController.class) {
if (mInstance == null) {
mInstance = new VolleyController(context);
}
}
}
return mInstance;
}
public RequestQueue getRequestQueue() {
return mRequestQueue;
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
public void addToRequestQueue(Request req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
mRequestQueue.add(req);
}
public void addToRequestQueue(Request req) {
req.setTag(TAG);
mRequestQueue.add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}
還需要一個Cache來存放請求的圖片:
//LruBitmapCache.java public class LruBitmapCache extends LruCacheimplements ImageLoader.ImageCache{ public static int getDefaultLruCacheSize() { final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); final int cacheSize = maxMemory / 8; return cacheSize; } public LruBitmapCache() { this(getDefaultLruCacheSize()); } public LruBitmapCache(int sizeInKiloBytes) { super(sizeInKiloBytes); } @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight() / 1024; } @Override public Bitmap getBitmap(String url) { return get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { put(url, bitmap); } }
新建一個Request並且把他加入到請求隊列中RequestQueue:
private void simpleRequest() {
StringRequest stringRequest = new StringRequest(
Request.Method.GET,
TEST_URL,
new Response.Listener() {
@Override
public void onResponse(String response) {
Log.d(TAG, "onResponse, response: " + response);
txtDisplay.setText("Response is: " + response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "onErrorResponse, error: " + error.getMessage());
txtDisplay.setText("That didn't work!");
}
});
VolleyController.getInstance(this).addToRequestQueue(stringRequest, TAG);
}
Volley工作原理圖

在Activity的onStZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcCgpt723qNbQY2FuY2Vsy/nT0LHqvMfOqrjDVEFHtcTH68fzo7o8L3N0cm9uZz48L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;">
@Override
protected void onStop() {
super.onStop();
VolleyController.getInstance(this).cancelPendingRequests(TAG);
}
創建POST請求 上面說的都是GET請求,下面來說一下POST請求,與GET請求不同的是,只要在創建請求的時候將請求類型改為POST請求,並且override Request的getParams方法即可。 添加請求頭部信息 override Request的getHeaders方法。 Volley庫中自帶了NetworkImageView類,這個ImageView可以自動使用volley下載圖片。 ImageRequest構造函數源代碼: 可以看到,ImageRequest的構造函數接收6個參數 ImageLoader也可以用於加載網絡上的圖片,並且它的內部也是使用ImageRequest來實現的,不過ImageLoader明顯要比ImageRequest更加高效,因為它不僅可以幫我們對圖片進行緩存,還可以過濾掉重復的鏈接,避免重復發送請求。 由於ImageLoader已經不是繼承自Request的了,所以它的用法也和我們之前學到的內容有所不同,總結起來大致可以分為以下四步: NetworkImageView是一個自定義控件,它是繼承自ImageView的,具備ImageView控件的所有功能,並且在原生的基礎之上加入了加載網絡圖片的功能。 使用方法: 在build.gradle文件中添加gson依賴: 自定義GsonRequest: 在實際調用的時候,和普通的請求類似: 實體類Person類:(在AS下可以使用gson插件來生成) 測試代碼位置:https://github.com/YoungBear/VolleyLearn
private void simplePostRequest() {
StringRequest stringRequest = new StringRequest(
Request.Method.POST,
TEST_URL,
new Response.Listener
創建Image請求
使用ImageRequest
private void imageRequest() {
ImageRequest imageRequest = new ImageRequest(
TEST_URL_1,
new Response.Listener
@Deprecated
public ImageRequest(String url, Response.Listener
使用ImageLoader
private void imageLoaderGet() {
ImageLoader imageLoader = VolleyController.getInstance(this).getImageLoader();
imageLoader.get(TEST_URL_3, new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
mImageView3.setImageBitmap(response.getBitmap());
}
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Image Load Error: " + error.getMessage());
}
});
}
使用NetworkImageView
//...
JSON Request
private void jsonRequest() {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET,
TEST_URL,
null,
new Response.Listener
自定義Requet
dependencies {
...
compile 'com.google.code.gson:gson:2.7'
}
//GsonRequest.java
public class GsonRequest
private void personRequest() {
GsonRequest
package com.example.volleylearn.model;
import java.util.List;
/**
* Created by youngbear on 16/10/18.
*/
public class Person {
/**
* id : c200
* name : Ravi Tamada
* email : ravi@gmail.com
* address : xx-xx-xxxx,x - street, x - country
* gender : male
* phone : {"mobile":"+91 0000000000","home":"00 000000","office":"00 000000"}
*/
private List
Android Studio使用JNI調用C代碼
一、配置NDK環境第一步:在AndroidStudio中配置ndk環境需要下載ndk包,在AndroidStudio中File-->ProjectStructure
android 音樂播放器總結
學習從模仿開始一個星期完成的音樂播放器基本功能,具有下一首,上一首,暫停和隨機、順序和單曲等播放,以及保存上一次播放的狀態,缺少了歌詞顯示功能。使用了andbase框架的
Android 事件分發詳解及示例代碼
事件分發是Android中非常重要的機制,是用戶與界面交互的基礎。這篇文章將通過示例打印出的Log,繪制出事件分發的流程圖,讓大家更容易的去理解Android的事件分發機
Android編程單選項框RadioGroup綜合應用示例
本文實例講述了Android編程單選項框RadioGroup用法。分享給大家供大家參考,具體如下:今天介紹的是RadioGroup 的組事件.RadioGroup 可將各