這里是一個最基本的使用,在項目中也可以直接這樣使用,如果想學習更多請移步NoHttp主頁:
https://github.com/yanzhenjie/NoHttp
特別注意:這里的RequestQueue是請求隊列,默認3個並發請求,也就是有3個子線程在跑,所以正式項目中不要每發起一個請求就new一個隊列,建議在BaseActivity#onCreate(Bundle)
中new一個隊列即可,這個activity
的所有請求包括依賴此activity
的fragment
都是用這個隊列即可,在BaseActivity#onDestory()
時stop
這個隊列即可,當然特殊情況下可以再new一個Queue出來,也無傷大雅的。
建議讀者閱讀完下方的代碼后再把上面這句話讀一遍,會理解的更深刻。
BaseActivity,提供基礎的封裝
public class BaseActivtiy extends Activity implements View.OnClickListener { /** * 請求隊列 */ private RequestQueue mRequestQueue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 創建請求隊列, 默認並發3個請求, 傳入數字改變並發數量: NoHttp.newRequestQueue(5); mRequestQueue = NoHttp.newRequestQueue(); } @Override protected void onDestroy() { super.onDestroy(); mRequestQueue.cancelAll(); // 退出頁面時時取消所有請求。 mRequestQueue.stop(); // 退出時銷毀隊列,回收資源。 } /** * 發起一個請求。 * * @param what what. * @param request 請求對象。 * @param listener 結果監聽。 * @param <T> 要請求到的數據類型。 */ public <T> void request(int what, Request<T> request, OnResponseListener<T> listener) { mRequestQueue.add(what, request, listener); } }
在BaseActivity的子類中使用
public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... } /** * 請求用戶信息。 */ private void requestUserInfo() { Request<String> req = NoHttp.createStringRequest(url); request(0, req, new OnResponseListener<String>() { @Override public void onStart(int what) { // 請求開始,可以顯示一個dialog。 } @Override public void onSucceed(int what, Response<String> response) { // 請求成功,這里判斷服務器的響應碼,假如你們服務器200時,才是業務成功: Headers headers = response.getHeaders(); if(headers.getResponseCode() == 200) { String result = response.get(); // 拿到結果。 } } @Override public void onFailed(int what, Response<String> response) { // 請求失敗,具體失敗類型,請看nohttp主頁的demo。 } @Override public void onFinish(int what) { // 請求結束,關閉dialog。 } }); } }
在BaseActivity的子類的Fragment中使用
public class MainFragment extends Fragment { /** * 請求用戶信息。 */ private void requestUserInfo() { Request<String> req = NoHttp.createStringRequest(url); ((MainActivity)getActivity()).request(0, req, new OnResponseListener<String>() { @Override public void onStart(int what) { // 請求開始,可以顯示一個dialog。 } @Override public void onSucceed(int what, Response<String> response) { // 請求成功,這里判斷服務器的響應碼,假如你們服務器200時,才是業務成功: Headers headers = response.getHeaders(); if(headers.getResponseCode() == 200) { String result = response.get(); // 拿到結果。 } } @Override public void onFailed(int what, Response<String> response) { // 請求失敗,具體失敗類型,請看nohttp主頁的demo。 } @Override public void onFinish(int what) { // 請求結束,關閉dialog。 } }); } }
如果想學習更多的使用方法,建議參考Demo:https://github.com/yanzhenjie/NoHttp
更多使用介紹請閱讀NoHttp文檔:doc.nohttp.net