Nohttp請求圖片的兩種簡答的方式:普通請求以及緩存請求


開局聲明:這是基於nohttp1.0.4-include-source.jar版本寫的教程

由於nohttp功能強悍,因此需要多種權限,僅僅一個聯網的權限是不夠的,如果只給了Internet的權限,去請求網絡將還會報錯:

onFailed: com.yolanda.nohttp.error.NetworkError: The network is not available, please check the network. The requested url is: http://www.sciencenet.cn/xml/iphoneinterface.aspx?type=news&nums=20

因此建議,直接把nohttp的權限全部加入:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

首先是初始化整個應用全局的請求隊列

 1 package com.qg.lizhanqi.nohttpdemo;
 2 
 3 import android.app.Application;
 4 
 5 import com.yolanda.nohttp.NoHttp;
 6 
 7 /**
 8  * Created by lizhanqi on 2016-7-28-0028.
 9  */
10 public class MyApplication extends Application {
11     @Override
12     public void onCreate() {
13         //對你沒看錯就是這么一行就這么簡單,NOhttp就是這么簡單
14         NoHttp.initialize(this);
15         super.onCreate();
16     }
17 }

 

//普通的請求

 1     public void noHttpLoadImag(String url) {
 2         //第一步:創建Nohttp請求對列(如果是本類使用的比較頻繁,在onCreate的時候初始化一次就行了,這里是為了怕忘記這個步驟)
 3         requestQueues = NoHttp.newRequestQueue();
 4         //第二步:創建請求對象(url是請求路徑, RequestMethod.POST是請求方式)
 5         final Request<Bitmap> imageRequest = NoHttp.createImageRequest(url);//這里 RequestMethod.GET可以不寫(刪除掉即可),默認的是Get方式請求
 6         //第三步:加入到請求對列中,requestQueues.add()分別是請求列的請求標志,請求對象,監聽回調
 7         requestQueues.add(4, imageRequest, new SimpleResponseListener<Bitmap>() {
 8             @Override//成功后的回調
 9             public void onSucceed(int i, Response<Bitmap> response) {
10                 imageView.setImageBitmap(response.get());
11             }
12 
13             @Override//失敗后的回調
14             public void onFailed(int i, String s, Object o, Exception e, int i1, long l) {
15             }
16         });
17     }

//帶有緩存的請求圖片

 1     public void noHttpLoadCacheImag(String url) {
 2         //第一步:創建Nohttp請求對列(如果是本類使用的比較頻繁,在onCreate的時候初始化一次就行了,這里是為了怕忘記這個步驟)
 3         requestQueues = NoHttp.newRequestQueue();
 4         //第二步:創建請求對象(url是請求路徑, RequestMethod.POST是請求方式)
 5         Request<Bitmap> imageRequest = NoHttp.createImageRequest(url);//這里 RequestMethod.GET可以不寫(刪除掉即可),默認的是Get方式請求
 6         //第三步:設置請求緩存的五種模式:(這里與文字緩存一樣)
 7         //DEFAULT是http標准協議的緩存
 8         //imageRequest.setCacheMode(CacheMode.DEFAULT);
 9         //REQUEST_NETWORK_FAILED_READ_CACHE請求失敗返回上次緩存的數據(建議使用這種)
10         imageRequest.setCacheMode(CacheMode.REQUEST_NETWORK_FAILED_READ_CACHE);
11         //NONE_CACHE_REQUEST_NETWORK在沒有緩存再去請求網絡
12         // imageRequest.setCacheMode(CacheMode.NONE_CACHE_REQUEST_NETWORK);
13         // ONLY_READ_CACHE僅僅請求緩存,如果沒有緩存就會請求失敗
14         //imageRequest.setCacheMode(CacheMode.ONLY_READ_CACHE);
15         //ONLY_REQUEST_NETWORK僅僅請求網絡不支持302重定向
16         // imageRequest.setCacheMode(CacheMode.ONLY_REQUEST_NETWORK);
17 
18         //第四步:加入到請求對列中,requestQueues.add()分別是請求列的請求標志,請求對象,監聽回調
19         requestQueues.add(5, imageRequest, new SimpleResponseListener<Bitmap>() {
20             @Override//請求成功的回調
21             public void onSucceed(int i, Response<Bitmap> response) {
22                 imageView.setImageBitmap(response.get());
23             }
24             @Override//請求失敗的回調
25             public void onFailed(int i, String s, Object o, Exception e, int i1, long l) {
26             }
27         });
28     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM