編輯:關於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; } publicvoid 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 : [email protected]
* address : xx-xx-xxxx,x - street, x - country
* gender : male
* phone : {"mobile":"+91 0000000000","home":"00 000000","office":"00 000000"}
*/
private List
一、配置NDK環境第一步:在AndroidStudio中配置ndk環境需要下載ndk包,在AndroidStudio中File-->ProjectStructure
學習從模仿開始一個星期完成的音樂播放器基本功能,具有下一首,上一首,暫停和隨機、順序和單曲等播放,以及保存上一次播放的狀態,缺少了歌詞顯示功能。使用了andbase框架的
事件分發是Android中非常重要的機制,是用戶與界面交互的基礎。這篇文章將通過示例打印出的Log,繪制出事件分發的流程圖,讓大家更容易的去理解Android的事件分發機
本文實例講述了Android編程單選項框RadioGroup用法。分享給大家供大家參考,具體如下:今天介紹的是RadioGroup 的組事件.RadioGroup 可將各