編輯:關於Android編程
我們在Activity和Fragment中做網絡請求的時候,往往用到線程和handler消息處理機制等做處理。這裡,我們將網絡請求,一個get和一個post請求,使用線程封裝一下。這樣就剝離開了Activity中的代碼量,將復雜的代碼,封裝在不同的類中,實現一個類的單一原則。
/** * GET提交的網絡請求
*
* 傳遞過來主UI線程的消息處理器,經過線程處理之後,返回一個消息給主UI線程
* 在返回的msg信息中,what封裝了返回的狀態碼信息
* 1001代表成功,404代表客戶端請求錯誤,100代表IO處理錯誤
*
* obj信息封裝了請求的結果,返回值為String類型 * * @author ljtyzhr * */ public class HttpGetThread implements Runnable { /** handler處理 */ private Handler handler; /** 網絡請求地址 */ private String url; /** * 使用Get提交的構造方法 * * @param handler * 消息對象 * @param url * 請求的url地址 */ public HttpGetThread(Handler handler, String url) { this.handler = handler; this.url = url; } @Override public void run() { // 獲取我們回調主ui的message Message msg = handler.obtainMessage(); try { String result = HttpRequestUtils.doGet(url); msg.what = ConstantValues.GET_NET_SUCCEED; msg.obj = result; } catch (ClientProtocolException e) { msg.what = 404; } catch (IOException e) { msg.what = 100; } // 給主ui發送消息傳遞數據 handler.sendMessage(msg); } }
/** * POST提交的網絡請求
*
* 傳遞過來主UI線程的消息處理器,經過線程處理之後,返回一個消息給主UI線程
* 在返回的msg信息中,what封裝了返回的狀態碼信息
* 1001代表成功,404代表客戶端請求錯誤,100代表IO處理錯誤
*
* obj信息封裝了請求的結果,返回值為String類型 * * @author ljtyzhr * */ public class HttpPostThread implements Runnable { /** handler處理 */ private Handler handler; /** 網絡請求地址 */ private String url; /** * 使用post提交的構造方法 * * @param handler * 消息對象 * @param url * 請求的url地址 */ public HttpPostThread(Handler handler, String url) { this.handler = handler; this.url = url; } @Override public void run() { // 獲取我們回調主ui的message Message msg = handler.obtainMessage(); try { String result = HttpRequestUtils.doPost(url); msg.what = ConstantValues.GET_NET_SUCCEED; msg.obj = result; } catch (ClientProtocolException e) { msg.what = 404; } catch (IOException e) { msg.what = 100; } // 給主ui發送消息傳遞數據 handler.sendMessage(msg); } }
看到上面的參數信息,我們大致知道需要一些怎樣的參數,這裡簡單介紹如何使用這兩個封裝類:
給出一個Get請求的實例:
HttpGetThread httpGetThread = new HttpGetThread(handler, url, this); new Thread(httpGetThread).start();
private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case ConstantValues.GET_NET_SUCCEED: // 獲取網絡成功 jsonString = (String) msg.obj; break; case ConstantValues.GET_NET_FAILED: // 獲取網絡失敗 break; case ConstantValues.DEL_RESULT_SUCCEED: // 數據處理成功了,開始設置數據 break; case ConstantValues.DEL_RESULT_FAILED: // 字符串處理失敗 theUrlErrorShow(); break; case ConstantValues.THE_URL_ERROR: // 字符串處理失敗 Logger.ii(TAG, "The url error!"); break; default: break; } } };
在使用上面的網絡請求封裝類的時候,要注意兩個問題:
第一、我們使用的網絡請求中,需要傳遞當前的handler處理對象,用於接收我們的消息處理返回信息;內部的網絡請求,get和post請求,這裡不再贅述;
第二、我們使用的這個框架中,沒有使用到Cookie處理機制,那麼當我們做需要登錄的請求的時候,需要使用Cookie處理。
1. 測試相關概念1.1. 測試的分類按照是否知道源代碼:1.黑盒測試:不知道源代碼2.白盒測試:知道源代碼按照測試的粒度:1.方法測試 function test2.單
在程序開發過程中,LOG是廣泛使用的用來記錄程序執行過程的機制,它既可以用於程序調試,也可以用於產品運營中的事件記錄。在Android系統中,提供了簡單、便利的LOG機制
從原理可以看出,STC在相機運動環境中,效果不會太好,尤其是在高速運動環境下。因為高速運動環境,背景幾乎與前景一起運動,這與其核心原理是違背的,其次,時間上下文關系,也是
一. 列表內容 這段負責通話模塊的開發,研究了一下telephony模塊,網上參考了些資料加上自己的理解,總結了一下android6.0 MT 流程:。Markdown和