1. 程式人生 > >(轉)ym—— Android網路框架Volley(實戰篇)

(轉)ym—— Android網路框架Volley(實戰篇)

從上一篇來看 mQueue 只需要一個物件即可,new RequestQueue物件對資源一種浪費,我們應該在application,以及可以把取消請求的方法也在application進行統一管理,看以下程式碼:

[java] view plaincopyprint?
  1. package com.chronocloud.lib.base;  
  2. import android.app.Application;  
  3. import android.text.TextUtils;  
  4. import com.android.volley.Request;  
  5. import
     com.android.volley.RequestQueue;  
  6. import com.android.volley.VolleyLog;  
  7. import com.android.volley.toolbox.Volley;  
  8. publicclass ApplicationController extends Application {  
  9.     /** 
  10.      * Log or request TAG 
  11.      */
  12.     publicstaticfinal String TAG = "VolleyPatterns";  
  13.     /** 
  14.      * Global request queue for Volley
     
  15.      */
  16.     private RequestQueue mRequestQueue;  
  17.     /** 
  18.      * A singleton instance of the application class for easy access in other 
  19.      * places 
  20.      */
  21.     privatestatic ApplicationController sInstance;  
  22.     @Override
  23.     publicvoid onCreate() {  
  24.         super.onCreate();  
  25.         // initialize the singleton
  26.         sInstance = this;  
  27.     }  
  28.     /** 
  29.      * @return ApplicationController singleton instance 
  30.      */
  31.     publicstaticsynchronized ApplicationController getInstance() {  
  32.         return sInstance;  
  33.     }  
  34.     /** 
  35.      * @return The Volley Request queue, the queue will be created if it is null 
  36.      */
  37.     public RequestQueue getRequestQueue() {  
  38.         // lazy initialize the request queue, the queue instance will be
  39.         // created when it is accessed for the first time
  40.         if (mRequestQueue == null) {  
  41.             // 1
  42.             // 2
  43.             synchronized (ApplicationController.class) {  
  44.                 if (mRequestQueue == null) {  
  45.                     mRequestQueue = Volley  
  46.                             .newRequestQueue(getApplicationContext());  
  47.                 }  
  48.             }  
  49.         }  
  50.         return mRequestQueue;  
  51.     }  
  52.     /** 
  53.      * Adds the specified request to the global queue, if tag is specified then 
  54.      * it is used else Default TAG is used. 
  55.      *  
  56.      * @param req 
  57.      * @param tag 
  58.      */
  59.     public <T> void addToRequestQueue(Request<T> req, String tag) {  
  60.         // set the default tag if tag is empty
  61.         req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);  
  62.         VolleyLog.d("Adding request to queue: %s", req.getUrl());  
  63.         getRequestQueue().add(req);  
  64.     }  
  65.     /** 
  66.      * Adds the specified request to the global queue using the Default TAG. 
  67.      *  
  68.      * @param req 
  69.      * @param tag 
  70.      */
  71.     public <T> void addToRequestQueue(Request<T> req) {  
  72.         // set the default tag if tag is empty
  73.         req.setTag(TAG);  
  74.         getRequestQueue().add(req);  
  75.     }  
  76.     /** 
  77.      * Cancels all pending requests by the specified TAG, it is important to 
  78.      * specify a TAG so that the pending/ongoing requests can be cancelled. 
  79.      *  
  80.      * @param tag 
  81.      */
  82.     publicvoid cancelPendingRequests(Object tag) {  
  83.         if (mRequestQueue != null) {  
  84.             mRequestQueue.cancelAll(tag);  
  85.         }  
  86.     }  
  87. }  
接下來就是Volley雖然給我們提供了很多不同的Request(JsonObjectRequest,JsonArrayRequest,StringRequest,ImageRequest),但是還是滿足不了我們實戰中的需求,我們實戰開發中經常用到的是xml格式,Gson解析。

接下來我們來看看,如何自定義Request

XmlRequest:

[java] view plaincopyprint?
  1. publicclass XMLRequest extends Request<XmlPullParser> {  
  2.     privatefinal Listener<XmlPullParser> mListener;  
  3.     public XMLRequest(int method, String url, Listener<XmlPullParser> listener,  
  4.             ErrorListener errorListener) {  
  5.         super(method, url, errorListener);  
  6.         mListener = listener;  
  7.     }  
  8.     public XMLRequest(String url, Listener<XmlPullParser> listener, ErrorListener errorListener) {  
  9.         this(Method.GET, url, listener, errorListener);  
  10.     }  
  11.     @Override
  12.     protected Response<XmlPullParser> parseNetworkResponse(NetworkResponse response) {  
  13.         try {  
  14.             String xmlString = new String(response.data,  
  15.                     HttpHeaderParser.parseCharset(response.headers));  
  16.             XmlPullParserFactory factory = XmlPullParserFactory.newInstance();  
  17.             XmlPullParser xmlPullParser = factory.newPullParser();  
  18.             xmlPullParser.setInput(new StringReader(xmlString));  
  19.             return Response.success(xmlPullParser, HttpHeaderParser.parseCacheHeaders(response));  
  20. 相關推薦

    ym—— Android網路框架Volley(實戰)

    從上一篇來看 mQueue 只需要一個物件即可,new RequestQueue物件對資源一種浪費,我們應該在application,以及可以把取消請求的方法也在application進行統一管理,看以下程式碼: [java] view plaincopyprint?

    轉載-ym—— Android網路框架Volley(體驗)

    Volley是Google I/O 2013推出的網路通訊庫,在volley推出之前我們一般會選擇比較成熟的第三方網路通訊庫,如: 他們各有優劣,之前個人則比較喜歡用android-async-http, 如今Google推出了官方的針對Android平臺上的網路通訊庫,能使網路通訊更快

    Android網路框架Volley(實戰)

    之前講了ym—— Android網路框架Volley(體驗篇),大家應該瞭解了volley的使用,接下來我們要看看如何把volley使用到實戰專案裡面,我們先考慮下一些問題: 從上一篇來看 mQueue 只需要一個物件即可,new RequestQueue物件對資源一種浪費

    shiro權限框架詳解05-shiro授權

    roles ktr ase sub turn stp exc protected user http://blog.csdn.net/facekbook/article/details/54910606 本文介紹 授權流程 授權方式 授權測試 自定義授權rea

    shiro權限框架詳解06-shiro與web項目整合(下)

    tex web項目 ssd ndis form認證 lec rfi 出身 javadoc http://blog.csdn.net/facekbook/article/details/54962975 shiro和web項目整合,實現類似真實項目的應用 web項目中

    Android網路框架Volley

                    Volley是Google I/O 2013推出的網路通訊庫,在volley推出之前我們一般會選擇比較成熟的第三方網路通訊庫,如:他們各有優劣,之前個人則比較喜歡用android-async-http, 如今Google推出了官方的針對Android平臺上的網路通訊庫,能使網路

    Android網路框架volley學習(三)底層網路請求分析

    相關文章 前面我們分析了一下volley的基本用法及總體工作流程,由於volley是一個網路請求框架,所以本篇我們分析一下它的底層網路請求。 volley原始碼說長不長,說短不短,也有幾十個類,該從哪裡開始分析呢?我們從最基本的開始分析,還記得一開始進行

    Python爬蟲--通用框架

    statistic down 顯示 fonts ont 這樣的 數據處理 ODB 來看 轉自https://blog.csdn.net/m0_37903789/article/details/74935906 前言: 相信不少寫過Python爬蟲的小夥伴,都應

    解析庫使用xPath〈Python3網路爬蟲開發實戰

    僅做記錄   XPath對網頁進行解析的過程: from lxml import etree text = ''' <div> <ul> <li class="item-0"><a href="link1.htm

    Python3《機器學習實戰》學習筆記:樸素貝葉斯實戰之新浪新聞分類

    一 前言 拉普拉斯平滑 垃圾郵件過濾 新浪新聞分類 二 樸素貝葉斯改進之拉普拉斯平滑 上篇文章提到過,演算法存在一定的問題,需要進行改進。那麼需要改進的地方在哪裡呢?利用貝葉斯分類器對文件進行分類時,要計算多個概率的乘積以獲得

    機器學習實戰教程:樸素貝葉斯實戰之新浪新聞分類

    原文連結: Jack-Cui,https://cuijiahua.com/blog/2017/11/ml_5_bayes_2.html 一、前言 上篇文章機器學習實戰教程(四):樸素貝葉斯基礎篇之言論過濾器講解了樸素貝葉斯的基礎知識。本篇文章將在此基礎上進行擴充套件,你將看到以下內容: 拉普拉

    從零開始搭建android框架系列

    bsp andro hup 開始 blank class and lan com 網址:從零開始搭建android框架系列 githup:https://github.com/CameloeAnthony/Ant從零開始搭建android框架系列(轉)

    Android使用Fiddler模擬弱網路環境測試

    前言 現在的Android軟體,基本上都會有網路請求,有些APP需要頻繁的傳輸資料時對於網路請求的穩定性和在特殊網路條件下的相容性有要求,但是我們在測試的時候又很難模擬那種弱網路差網路的情況,今天就給大家分享一篇乾貨來模擬弱網路情況。 正文 第一步:下載抓包軟體fiddle

    Android VideoView播放網路視訊簡介

    最近專案中用到了很多視訊播放的地方,不管是聊天傳送的視訊訊息,還是類似內涵段子的視訊列表,都會涉及這些知識,不過網上的知識都很零散,一會找快取方法,一會找預覽圖片的方法,一會找視訊動態修改尺寸的方法,總之找的人好煩,所以自己寫一篇來記錄這些知識點,也方便別人查閱 獲取視訊首幀當預覽圖(MediaMetada

    Android網路框架:OKHttp原始碼簡單解析

    這是第一次解析原始碼並把它寫出來,在之前,我一直以為只要會用別人的輪子就好,做出實際的效果就行,對看原始碼對自己的能力提升不以為然。後來偶然聽到一句話:看別人的DEMO,你就可以會用輪子,但是要想用好輪子,還是得看原始碼。我覺得看原始碼有兩個方面的好處: 1

    不惑之年的硬體牛人到軟體自學之netty框架Netty的網路協議:WebSocket和UDP

    由於近期開發一箇中型的物聯專案,帶著十來個兄弟從底層硬體到無線局域通訊到通用閘道器到netty高可用框架到spring cloud的後臺開發到移動端APP開發到WEB前端的開發整體框架的搭建,雖然很辛苦,但我一直在給兄弟們說我們要三年內在物聯行業佔有一席之地,期待專案的成功。

    Android消息機制1-Handler(Java層)

    word get() als php lib light ora out getc 轉自:http://gityuan.com/2015/12/26/handler-message-framework/ 相關源碼 framework/base/core/java/an

    理解Android進程創建流程

    object c mman appdata sel failed scrip sca emp 不足 /frameworks/base/core/java/com/android/internal/os/ - ZygoteInit.java - Zygote

    說說Android應用的persistent屬性

    bsp 是什麽 添加 mpat ltrace cleanup activity 異步 rip 1 啟動persistent應用 在Android系統中,有一種永久性應用。它們對應的AndroidManifest.xml文件裏,會將persistent屬性設為true

    理解Android線程創建流程

    ttr cal 創建失敗 指向 ear long readn nbsp bar /android/libcore/libart/src/main/java/java/lang/Thread.java /art/runtime/native/java_lang_Thread