KJHttp框架使用講解


摘要

本文原創,轉載請注明地址:http://kymjs.com/code/2015/05/12/01
寫給那些在用、想用、還沒有用過KJFrame的朋友。 KJFrameForAndroid總共分為四個功能:Activity繼承鏈的規范,Http數據請求和上傳下載,Bitmap大圖加載以及ListView滾動時只加載內存圖片,數據庫對象存儲與集合對象存儲。還有一個獨立出來的功能CJFrame插件化開發框架,支持啟動在你的手機中未安裝的apk應用。 

KJFrameForAndroid下載地址:https://github.com/kymjs/KJFrameForAndroid

基礎功能

KJHttp是專為解決Android中Http通信而產生的,它在請求和響應層面做到了全自動構建和解析,主要用於Android快速開發。
KJHttp自帶了數據緩存功能,你所訪問的Http數據都將在本地建立一個緩存,默認的緩存時間是5分鍾,也就是5分鍾以內相同的請求都不會經過網絡,而是從本地緩存中直接讀取。當然對於及時性要求較高的新聞類應用,你也可以關閉這個特性或者只需要將緩存時間設置成0就行了~
KJHttp支持JSON格式參數提交、AJAX方式的Form表單參數提交,文件與圖片的上傳下載,同時支持根據你的需求所發起的自定義Request。

工作原理

整個KJHttp工作流程:采用責任鏈設計模式,由三部分組成,類似設計可以類比Handle…Looper…MessageQueue
1. KJHttp負責不停向NetworkQueue(或CacheQueue實際還是NetworkQueue, 具體邏輯請查看 {@link CacheDispatcher})添加Request
2. 另一邊由TaskThread不停從NetworkQueue中取Request並交給Network執行器(邏輯請查看 {@link NetworkDispatcher} ),
3. Network執行器將執行成功的NetworkResponse返回給TaskThead,並通過Request的定制方法 {@link Request#parseNetworkResponse()}封裝成Response,最終交給分發器 {@link Delivery} 分發到主線程並調用HttpCallback相應的方法

基礎用法

get或post以JSON傳參的方式請求數據示例

/**  * 使用JSON提交參數而不是Form表單  */ private void jsonRequest() { KJHttp kjh = new KJHttp(); HttpParams params = new HttpParams(); params.putHeaders("Cookie", "cookie不能告訴你"); //這里傳遞json字符串,(JSONObject可以調用toString方法轉換) params.putJsonParams(jsonObj.toString()); kjh.jsonPost( "http://www.oschina.net/action/api/team_stickynote_batch_update", params, new HttpCallBack() { @Override public void onSuccess(String t) { super.onSuccess(t); toast(t); } }); }

get或post以AJAX方式請求JSON數據示例

KJHttp kjh = new KJHttp(); HttpParams params = new HttpParams(); params.put("id", "1"); //傳遞參數 params.put("name", "kymjs"); //HttpCallback中有很多方法,可以根據需求選擇實現 kjh.post("http://192.168.1.149/post_api", params, new HttpCallBack() { @Override public void onSuccess(String t) { super.onSuccess(t); ViewInject.longToast("請求成功"); KJLoger.debug("log:" + t.toString()); } // ...... //還有更多,就不一一介紹了,大家可以參考API文檔 // ...... });

文件上傳支持多文件上傳,支持傳file對象,byte[]兩種

private void upload() { HttpParams params = new HttpParams(); //可多次put,支持多文件上傳 params.put("file", FileUtils.getSaveFile("KJLibrary", "logo.jpg")); kjh.post("http://192.168.1.149/kymjs/hello.php", params, new HttpCallBack() { @Override public void onSuccess(String t) { super.onSuccess(t); ViewInject.toast("success"); } @Override public void onFailure(Throwable t, int errorNo, String strMsg) { super.onFailure(t, errorNo, strMsg); ViewInject.toast("error" + strMsg); } /** 還有更多實現... **/ }); }

文件下載與斷點續傳

kjh.download("http://www.kymjs.com/app/kjblog.apk", "file.apk",new HttpCallBack() { @Override public void onSuccess(File f) { super.onSuccess(f); KJLoger.debug("success"); ViewInject.toast("toast"); mProgress.setProgress(mProgress.getMax()); } @Override public void onFailure(Throwable t, int errorNo,String strMsg) { super.onFailure(t, errorNo, strMsg); KJLoger.debug("onFailure"); } /* onLoading 方法就只在文件下載時才會被回調 */ @Override public void onLoading(long count, long current) { super.onLoading(count, current); mProgress.setMax((int) count); mProgress.setProgress((int) current); KJLoger.debug(count + "------" + current); } });

更多可配置方法

KJHttp kjh = new KJHttp(); //取消一個請求 kjh.cancle(url); //讀取一個本地緩存數據 kjh.getCache(url); //刪除一個本地緩存 kjh.removeCache(url);

高級設置

以上是基礎用法,同樣也支持自定義設置,你可以自定義數據緩存的方式,請求的優先級,請求數據的有效時間。同時支持根據你的需求所發起的自定義Request。 更多的使用,可以參考實際項目中的使用愛看博客客戶端


免責聲明!

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



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