Android實戰(zhàn):仿網(wǎng)易新聞app(1)網(wǎng)絡(luò)封裝

這個仿網(wǎng)易新聞app系列博客要開寫了,首先要先說明一下,這個系列博客是給基礎(chǔ)進階的小伙伴們看的,也就是說你看之前,必須了解android的四大組件,對于網(wǎng)絡(luò)編程,第三方框架有一個基礎(chǔ)的了解,所以這里對于基礎(chǔ)知識基本不會詳細展開,敬請諒解。
還有由于最近工作繁忙,這系列博客可能會寫的簡單點,但會把基本的技術(shù)要點都過一遍。

網(wǎng)絡(luò)封裝

這個項目中使用的網(wǎng)絡(luò)請求工具是httpConnect,通過自己簡單封裝實現(xiàn)的,礙于個人能力問題,可能封裝的不夠好,但是基本夠用了。
另外httpConnect在android6.0已經(jīng)被棄用了,所以在使用的時候記得在module的gradle文件的android中添加useLibrary 'org.apache.http.legacy',這時才能導(dǎo)入。

網(wǎng)絡(luò)封裝核心類

HttpCallbackListener:網(wǎng)絡(luò)請求回掉接口

HttpClientFactory:網(wǎng)絡(luò)請求工廠類,設(shè)置http請求的各項參數(shù),如超時時間,請求失敗重試次數(shù)等等

HttpRequestCode:網(wǎng)絡(luò)請求狀態(tài)碼描述,根據(jù)網(wǎng)絡(luò)請求返回的狀態(tài)碼,返回狀態(tài)碼的描述信息,用于返回錯誤信息,如網(wǎng)絡(luò)請求返回了404,將404傳入就返回requestCode: 404 -- Not Found字符串

HttpHelper:最核心的一個封裝類,網(wǎng)絡(luò)請求的方法都在這里。

首先我們分析按照網(wǎng)絡(luò)請求框架的一般方法,如okhttp之類的,發(fā)現(xiàn)在發(fā)出請求之后,會強制實現(xiàn)兩個方法,即請求成功和請求失敗兩種情況的結(jié)果,因此我們需要成功和失敗的兩個接口,代碼如下:

public interface HttpCallbackListener {
    void onSuccess(String result);
    void onError(Exception e);
}

HttpHelper類

這個類需要詳細了解一下,里面是執(zhí)行網(wǎng)絡(luò)操作的具體方法,如使用get請求或者使用post,當(dāng)然,其中最重要的是execute()方法,代碼如下:

   private static void execute(String url, HttpRequestBase requestBase, HttpCallbackListener httpCallbackListener) {
        boolean isHttps = url.startsWith("https://");//判斷是否需要采用https
        AbstractHttpClient httpClient = HttpClientFactory.create(isHttps);
        HttpContext httpContext = new SyncBasicHttpContext(new BasicHttpContext());
        HttpRequestRetryHandler retryHandler = httpClient.getHttpRequestRetryHandler();//獲取重試機制
        int retryCount = 0;
        boolean retry = true;
        while (retry) {
            try {
                HttpResponse response = httpClient.execute(requestBase, httpContext);//訪問網(wǎng)絡(luò)
                int stateCode  = response.getStatusLine().getStatusCode();
                if (response != null) {
                    if (stateCode == HttpURLConnection.HTTP_OK){
                        HttpResult httpResult = new HttpResult(response, httpClient, requestBase);
                        String result = httpResult.getString();
                        if (!TextUtils.isEmpty(result)){
                            httpCallbackListener.onSuccess(result);
                            return;
                        } else {
                            throw new RuntimeException("數(shù)據(jù)為空");
                        }
                    } else {
                        throw new RuntimeException(HttpRequestCode.ReturnCode(stateCode));
                    }
                }
            } catch (Exception e) {
                IOException ioException = new IOException(e.getMessage());
                retry = retryHandler.retryRequest(ioException, ++retryCount, httpContext);//把錯誤異常交給重試機制,以判斷是否需要采取從事
                LogUtils.e(TAG, "重復(fù)次數(shù):" + retryCount + "   :"+ e);
                if (!retry){
                    httpCallbackListener.onError(e);
                }
            }
        }
    }

在這里我們使用httpClient執(zhí)行網(wǎng)絡(luò)請求,當(dāng)網(wǎng)絡(luò)請求正確,并且返回的狀態(tài)碼為200的時候,此時得到正確的結(jié)果,調(diào)用HttpCallbackListener.onSuccess()方法返回數(shù)據(jù),如果重試多次仍然失敗就調(diào)用httpCallbackListener.onError(e);方法。

最后我們只需要調(diào)用HttpHelper.get()就可以請求網(wǎng)絡(luò)了。

以上就是網(wǎng)絡(luò)請求的基本內(nèi)容了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,037評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • AFHTTPRequestOperationManager 網(wǎng)絡(luò)傳輸協(xié)議UDP、TCP、Http、Socket、X...
    Carden閱讀 5,320評論 0 12
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,315評論 4 61
  • 時代總是在進步,但是大部分人的生活理念或者說關(guān)于“活著”的思想?yún)s并沒有進步。 從小到大,甚至早在媽媽肚子里時,我們...
    木大可大閱讀 278評論 0 0

友情鏈接更多精彩內(nèi)容