<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## (一).前言: 對于網絡框架這部分,其實也一直想寫點東西總結一下,很長的一段時間對于網絡請求這塊,在我剛開始做Android開發的時候還是2.2,2.3版本居多,那時候我們的項目中經常使用的是HttpURLConnection和HTTPClient來進行HTTP通信。不過這兩種方式的用法有很多復雜的地方,我們在實際使用中都要進行封裝,一個HTTP請求自定義封裝工具類,方法一多一般就是幾百行或者幾千行代碼,這樣如果封裝不好就會出現很多重復的代碼甚至Bug。慢慢的就出現了很多網絡請求框架例如:AsyncHttpClient,OkHttp,google親兒子Okhttp之類的。現在比較熱門的網絡請求框架:Volley,Okhttp,這些已經在項目中得到很多的應用。?? 從我這邊的角度來講,我這邊項目網絡請求這塊的演變如下:HttpURLConnection,HTTPClient->Volley->Okhttp。所以我這邊會把Volley和Okhttp這兩個框架的使用,進階,分裝都會講一遍,也方便初學者或者各位能夠學會使用以及明白相關的原理。 Volley系列教程大綱如下: 1. Volley完全解析之基礎 2. Volley完全解析之進階 3. Volley完全解析之源碼分析??????? 今天我們首先來進入Volley使用基礎階段,會涉及到字符串,JSON,圖片等等網絡數據請求相關方法的使用。 FastDev4Android框架項目地址:[https://github.com/jiangqqlmj/FastDev4Android](https://github.com/jiangqqlmj/FastDev4Android) ## (二).Volley基本介紹: 2.1.Volley簡介: 2013年Google? I/O大會的時候GoogleAndroid開發團隊推出了一個新網絡數據請求框架Volley網絡通信庫,它能夠使得通信速度更加快,更加簡單以及更健壯。看一下官網的發布圖片: ![](https://box.kancloud.cn/2016-01-18_569c8eb843d6d.jpg) 發射火弓箭的圖有點類似流星,從這幅圖我們可以看出來Volley比較適合數據量不大但是通信頻繁的場景。它當初的設計目標就是非常適合去進行數據量不大,但是網絡通信比較頻繁的操作。但是如果數據量很大的網絡例如:文件下載這類的,Volley框架的效率就會比較差了。 2.2.Volley功能特點: 1. 提供字符串,文本,JSON圖片等數據的異步下載,同時提供回調接口 2. Request請求的優先級以及排序 3. 網絡請求,圖片等相關緩存功能 4. 網絡請求cancel機制 5. 和原生組件生命周期聯動機制(例如:Activity結束的時候,會取消掉網絡請求)等 2.3.Volley框架依賴配置: Volley庫地址為:https://android.googlesource.com/platform/frameworks/volley你可以使用git進行克隆一份,當然這個地址是被墻掉得。你也可以去github中進行clone下載; ?[https://github.com/mcxiaoke/android-volley](https://github.com/mcxiaoke/android-volley) 然后采用library依賴的方式導入項目,或者編譯成jar包,在進行引入。當然如果你使用的是AndroidStudioIDE,你可以直接添加以下依賴即可: ~~~ compile'com.mcxiaoke.volley:library:1.0.19' ~~~ ?????????在我們今天演示的例子項目中,我這邊直接采用庫依賴的方式,如果大家如果clone我這邊FastDev4Android項目,可以直接看到源代碼,便于后面我們對于源代碼的修改以及功能封裝。 ## (三).Volley使用講解: OK有了上面的準備工作,我們現在開始正式使用Volley框架進行我們的網絡請求,要實現網絡數據請求主要要記住下面三步驟: 1.創建RequestQueue對象 2.創建XXRequest對象(XX代表String,JSON,Image等等) 3.把XXRequest對象添加到RequestQueue中即可 3.1.StringRequest使用??? 我們現在開始使用StringRequest來獲取文本字符串數據,首先創建RequestQueue對象: ~~~ RequestQueue requestQueue=Volley.newRequestQueue(this); ~~~ 該通過Volley的靜態方法newRequestQueue(Context)來獲取一個請求隊列對象,內部設計有請求緩存,系統版本區分請求,并且設計適合于高并發。間接著創建StringRequest對象來發起HTTP請求,然后接收相應數據: ~~~ StringRequest stringRequest=new StringRequest(Request.Method.GET, "http://www.sina.com.cn", new Response.Listener<String>() { @Override public void onResponse(String response) { tv_result.setVisibility(View.VISIBLE); img_result.setVisibility(View.GONE); tv_result.setText(response.toString()); } }, new Response.ErrorListener(){ @Override public void onErrorResponse(VolleyError error) { } }); ~~~ 創建StringRequest對象傳入四個參數: 1. 請求方法GET/POST/或者其他 2. 請求服務器的目標地址 3. 服務器數據成功響應回調 4. 服務器數據失敗響應回調 第三步,就是StringRequest請求對象加入請求隊列中(RequestQueue) ~~~ requestQueue.add(jsonObjectRequest); ~~~ 以上就完成了StringRequest的請求操作,運行效果如下圖: ![](https://box.kancloud.cn/2016-01-18_569c8eb88c106.jpg) 上面我們就是完成了StringRequest的請求一種實例,不過上面只是簡單的Get請求,Volley框架也還是支持Post請求,但是比較遺憾的是Volley框架沒有直接提供設置Post請求參數的方法,但是我們實現getParams()方法來添加參數,更加讓我們開發使用起來簡單的方法就是修改Volley框架源代碼,后面使用進階中我們會將到源代碼相關修改。現在我們繼續往下看。 3.2.JsonObjectRequest和JsonArrayRequest使用??? JsonObjectRequest和JsonArrayRequest都是集成自JsonRequest,而JsonRequest又是Request的子類。所以我們使用起來還是和StringRequest的方式差不多。 ~~~ JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET , "http://interface.zttmall.com/update/mallUpdate",null,new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Gson gson=new Gson(); tv_result.setVisibility(View.VISIBLE); img_result.setVisibility(View.GONE); tv_result.setText(gson.fromJson(response.toString(),UpdateBean.class).toString()); } }, new Response.ErrorListener(){ @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(jsonObjectRequest); ~~~ 這邊例子是請求一個地址,返回的是JSON數據格式的數據,我們這邊使用還定義了一個UpdateBean實體類,使用Gson來對數據進行解析,最后把對象打印出來。效果如下: ![](https://box.kancloud.cn/2016-01-18_569c8eb8f06d1.jpg) 查看以上的onResponse(JSONObject object)回調方法,傳入參數為JSONObject對象,因為我們的接口返回就是單條的JSON數據,內部已經把JSON數據格式化成JSONObject對象了。得到對象我們直接解析即可。至于JsonArrayRequest的使用和JsonRequest使用差不多,一個單條,一個是多條而已。這邊就不演示了。 3.3.ImageRequest使用 學完上面的文本,josn等數據的加載,現在我們來看一下圖片的加載模塊了,Volley對于圖片加載也給我們提供相應的工具類以及相關方法,主要是以下三種: 1. ImageRequest 2. ImageLoder 3. NetWorkImageView 下面我們來分別學習一下這三種圖片加載方法,首先講一下ImageRequest ImageRequest也是繼承自Request類,用法步驟和上面的三步驟戰略差不多,整體代碼如下: ~~~ ImageRequest imageRequest=new ImageRequest("http://interface.zttmall.com/Images/upload/image/20150325/20150325083110_0898.jpg" , newResponse.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { tv_result.setVisibility(View.GONE); img_result.setVisibility(View.VISIBLE); img_result.setImageBitmap(response); } }, 300, 300,ImageView.ScaleType.FIT_XY, Bitmap.Config.ARGB_8888, newResponse.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(imageRequest); ~~~ 創建ImageRequest對象,然后加入到請求隊列中即可,ImageRequest創建的時候需要傳入一下參數: * 圖片地址 * 圖片請求成功回調 * 圖片設置寬 * 圖片設置高 * 圖片拉伸類型 * 圖片屬性 * 圖片請求失敗回調 最后ImageRequest對象添加到請求隊列中即可。然后加載顯示圖片如下: ![](https://box.kancloud.cn/2016-01-18_569c8eb9231f9.jpg) 3.4.ImageLoader使用 現在我們來看圖片加載第二種方式使用ImageLoader,該類的使用方法就需要改變一下,因為ImageLoader可以把圖片緩存結合進去,例如我們集合LruCache工具。所以整體來講還是比ImageRequest功能強大了一點。使用步驟如下: 1. 創建RequestQueue請求隊列對象 2. 創建ImageLoader圖片加載器對象 3. 獲取ImageListener圖片監聽器 4. 帶哦用ImageLoader.get()方法來進行加載圖片 下面我們來具體演示一下使用ImageLoder來加載圖片。 首先創建RequestQueue對象: ~~~ RequestQueue requestQueue=Volley.newRequestQueue(this); ~~~ 創建ImageLoader對象,需要創建圖片緩存器 ~~~ packagecom.chinaztt.fdv; importandroid.graphics.Bitmap; importcom.android.volley.toolbox.ImageLoader; /** * 當前類注釋:圖片緩存器,實現ImageLoder.ImageCache實現其中的方法,具體圖片怎么樣緩存讓我們自己來實現 * 這樣可以考慮到將來的擴展性 * 項目名:FastDev4Android * 包名:com.chinaztt.fdv * 作者:江清清 on 15/11/12 12:31 * 郵箱:jiangqqlmj@163.com * QQ: 781931404 * 公司:江蘇中天科技軟件技術有限公司 */ public class Fdv_ImageCache implements ImageLoader.ImageCache { @Override public Bitmap getBitmap(String url) { return null; } @Override public void putBitmap(String url, Bitmapbitmap) { } } ~~~ 這邊我創建了一個Fdv_ImagCache類實現ImageLoader.ImageCache接口,并且實現其中的兩個方法,這樣圖片的緩存具體方式讓我們用戶自己來實現,可以增強系統緩存的可擴展性,自定義搞定。這邊我們暫時不具體實現方法直接給了空實現,后面的進階講解中會具體來將這些問題。下面為ImageLoader對象創建: ~~~ ImageLoader imageLoader=new ImageLoader(requestQueue, new Fdv_ImageCache()); ~~~ 分別傳入請求隊列,以及圖片緩存器即可。 下邊獲取ImageListener監聽器: ~~~ ImageLoader.ImageListener listener=ImageLoader.getImageListener(img_result,R.drawable.ic_loading,R.drawable.ic_loading); ~~~ 直接通過ImageLoader的靜態方法getImageListener()來進行獲取,傳入三個參數分別為: * 需要實現圖片的控件imageview * 正在加載過程中的默認圖片ID * 圖片下載失敗顯示的圖片ID 最后使用ImageLoader調用get方法來下載并且顯示圖片 ~~~ imageLoader.get("http://interface.zttmall.com//Images//upload//image//20150328//20150328105404_2392.jpg",listener); ~~~ OK這樣就搞定了,讓我們來看效果顯示: ![](https://box.kancloud.cn/2016-01-18_569c8eb955808.jpg) 3.5.NetworkImageView使用 最后我們來講一下第三種方式加載圖,NetworkImageView,該為自定義的ImageView控件,對ImageView的功能進行了擴展,加入了圖片下載的功能,具體使用方法如下: 1. 創建RequestQueue對象 2. 創建Imageloader對象 3. 布局文件使用NetworkImageView自定義控件 4. 使用獲取控件調用setImageUrl()方法即可 布局文件如下: ~~~ <com.android.volley.toolbox.NetworkImageView android:id="@+id/img_result_network" android:layout_width="300dp" android:layout_height="300dp" android:layout_centerHorizontal="true"/> ~~~ 間接著創建ImageLoader對象: ~~~ ImageLoader network_imageLoader=new ImageLoader(requestQueue, new Fdv_ImageCache()); ~~~ 然后獲取NetworkImageView控件并且調用setimageUrl()方法如下: ~~~ img_result_network.setImageUrl("http://interface.zttmall.com//Images//upload//image//20150325//20150325083214_8280.jpg",network_imageLoader); ~~~ ??????? setImageUrl()傳入圖片地址以及圖片加載器imageloader,這樣就可以自動下載圖片并且進行顯示,不過在此之前,我們可以對該控件進行相關設置:setDefaultImageResId(),? setErrorImageResId()分別設置默認加載圖片或者圖片下載失敗顯示圖片。 具體實例效果如下: ![](https://box.kancloud.cn/2016-01-18_569c8eb9b49ba.jpg) ## (四).結束語: 到此為止我們已經講完了Volley框架的基本介紹以及相關工具的使用(例如:StringRequest,JsonRequest,JsonArrayRequest,ImageRequest,ImageLoader,NetworkImageView等),具體例如Post請求參數修改,圖片緩存器,使用最佳實踐等相關高級進階相關會在下一講中更新。具體實例和框架注釋過的全部代碼已經上傳到FastDev4Android項目中了。 同時歡迎大家去Github站點進行clone或者下載瀏覽: [https://github.com/jiangqqlmj/FastDev4Android](https://github.com/jiangqqlmj/FastDev4Android)?同時歡迎大家star和fork整個開源快速開發框架項目~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看