開局聲明:這是基於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 }
Get請求方式
1 public void noHttpGetString(String url) { 2 //第一步:創建Nohttp請求對列(如果是本類使用的比較頻繁,在onCreate的時候初始化一次就行了,這里是為了怕忘記這個步驟) 3 requestQueues = NoHttp.newRequestQueue(); 4 //第二步:創建請求對象(url是請求路徑) 5 Request<String> stringRequest = NoHttp.createStringRequest(url,RequestMethod.GET);//這里 RequestMethod.GET可以不寫(刪除掉即可),默認的是Get方式請求 6 //第三步:加入到請求對列中,requestQueues.add()分別是請求列的請求標志,請求對象,監聽回調 7 requestQueues.add(1, stringRequest, new SimpleResponseListener<String>() { 8 @Override 9 public void onSucceed(int i, Response<String> response) { 10 Toast.makeText(MainActivity.this, "noHttpGetString請求成功" + response, Toast.LENGTH_SHORT).show(); 11 } 12 13 @Override 14 public void onFailed(int i, String s, Object o, Exception e, int i1, long l) { 15 Toast.makeText(MainActivity.this, "noHttpGetString請求失敗" + e, Toast.LENGTH_SHORT).show(); 16 Log.e(TAG, "onFailed: " + e); 17 } 18 }); 19 }
post方式請求
1 public void noHttpPostString(String url) { 2 //第一步:創建Nohttp請求對列(如果是本類使用的比較頻繁,在onCreate的時候初始化一次就行了,這里是為了怕忘記這個步驟) 3 requestQueues = NoHttp.newRequestQueue(); 4 //第二步:創建請求對象(url是請求路徑, RequestMethod.POST是請求方式) 5 Request<String> stringPostRequest = NoHttp.createStringRequest(url, RequestMethod.POST); 6 // 添加請求參數例如"http://www.sciencenet.cn/xml/iphoneinterface.aspx?type=news&nums=20" 7 stringPostRequest.add("type", "news"); 8 stringPostRequest.add("nums", "20"); 9 //第三步:加入到請求對列中,requestQueues.add()分別是請求列的請求標志,請求對象,監聽回調 10 requestQueues.add(2, stringPostRequest, new SimpleResponseListener<String>() { 11 @Override//請求成功的回調 12 public void onSucceed(int i, Response<String> response) { 13 Log.i(TAG, "onSucceed: " + response); 14 Toast.makeText(MainActivity.this, "noHttpPostString請求成功" + response.get(), Toast.LENGTH_LONG).show(); 15 } 16 17 @Override//請求失敗的回調 18 public void onFailed(int i, String s, Object o, Exception e, int i1, long l) { 19 Log.e(TAG, "onFailed: " + e); 20 } 21 }); 22 }
//緩存文字的請求
1 public void noHttpCacheString(String url) { 2 //第一步:創建Nohttp請求對列(如果是本類使用的比較頻繁,在onCreate的時候初始化一次就行了,這里是為了怕忘記這個步驟) 3 requestQueues = NoHttp.newRequestQueue(); 4 //第二步:創建請求對象(url是請求路徑, RequestMethod.POST是請求方式) 5 Request<String> stringPostRequest = NoHttp.createStringRequest(url); 6 //第三步:設置請求緩存的五種模式: 7 //DEFAULT是http標准協議的緩存 8 //stringPostRequest.setCacheMode(CacheMode.DEFAULT); 9 //REQUEST_NETWORK_FAILED_READ_CACHE請求失敗返回上次緩存的數據(建議使用這種) 10 stringPostRequest.setCacheMode(CacheMode.REQUEST_NETWORK_FAILED_READ_CACHE); 11 //NONE_CACHE_REQUEST_NETWORK在沒有緩存再去請求網絡 12 // stringPostRequest.setCacheMode(CacheMode.NONE_CACHE_REQUEST_NETWORK); 13 // ONLY_READ_CACHE僅僅請求緩存,如果沒有緩存就會請求失敗 14 //stringPostRequest.setCacheMode(CacheMode.ONLY_READ_CACHE); 15 //ONLY_REQUEST_NETWORK僅僅請求網絡不支持302重定向 16 // stringPostRequest.setCacheMode(CacheMode.ONLY_REQUEST_NETWORK); 17 // 添加請求參數例如"http://www.sciencenet.cn/xml/iphoneinterface.aspx?type=news&nums=20" 18 //第三步:加入到請求對列中,requestQueues.add()分別是請求列的請求標志,請求對象,監聽回調 19 requestQueues.add(3, stringPostRequest, new SimpleResponseListener<String>() { 20 @Override//請求成功的回調 21 public void onSucceed(int i, Response<String> response) { 22 Log.i(TAG, "onSucceed: " + response); 23 Toast.makeText(MainActivity.this, "noHttpCacheString請求成功" + response.get(), Toast.LENGTH_LONG).show(); 24 } 25 26 @Override//請求失敗的回調 27 public void onFailed(int i, String s, Object o, Exception e, int i1, long l) { 28 Log.e(TAG, "noHttpCacheString..onFailed: " + e); 29 } 30 }); 31 }