1. 程式人生 > >基於okHttpUtils網路請求的基類抽取

基於okHttpUtils網路請求的基類抽取

二次封裝的功能

1,網路的get請求
2,Xml資料解析

封裝後,子類只需要實現的步驟

1,實現getUrl方法,提供一個請求的url地址
2,選擇性實現getParamsMap方法,提供一個請求引數的map集合,因為部分可能不需要引數
3,子類繼承基類的時候,基類要宣告泛型的具體型別

為什麼要進行基類的抽取

1,因為後期網路請求的地方比較多
2,減少程式碼量
3,結構更加清晰

抽取需要修改的地方處理

1,每個網路請求的URL地址不一樣,抽取一個抽象方法,子類必須實現
2,每個網路請求的引數不一樣,抽取一個方法,子類選擇性實現,因為有的請求可能沒有引數
3,介面中,引數的型別不一樣,使用泛型RESTYPE,使用泛型

注意事項

1,不知道怎麼抽取的就先不用管,使其可以繼承
2,在基類中不可以具體實現的,抽取一個方法交給子類實現
3,不確定的型別,使用泛型,泛型使用必須在該類或者介面中宣告,如果其他地方呼叫該類或者介面,也必須使用泛型
    注意,在子類中,如果用到該類或者介面要進行泛型的宣告

程式碼

/**
 * Author:      歸零
 * Date:        2017/3/4 9:31
 * Email:       [email protected]
 * Description:網路請求和資料的轉換的基類
 * 需要改變的地方
 * 1,NewsPagerProtocol.Callback  改為 BaseProtocol
 * 2,引數不確定,提供一個方法 子類必須實現
 * 3,Url不確定,提供一個方法,子類必須實現
 * 4,泛型的改變
 *      1,將要改變的型別,變為泛型
 *          1,使用泛型後要在類或者介面中宣告泛型
 *          2,在類或者介面使用的地址,新增泛型
 *          3,在使用的類或者介面宣告泛型
 *      2,
 */
public abstract class BaseProtocol<RESTYPE> { protected int mCurrentPageIndex; public void setCurrentPageIndex(int currentPageIndex) { mCurrentPageIndex = currentPageIndex; } public void loadData(final BaseProtocol.Callback<RESTYPE> callback) { //決定請求的網路地址
String newsUrl = getUrl(); //http://www.oschina.net/action/api/news_list?pageIndex=0&catalog=1&pageSize=20 //網路請求 OkHttpUtils .get() .url(newsUrl) .params(getParamsMap()) .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { //因為返回失敗處理的請求不一樣,所以不處理,交給呼叫的方法處理 callback.onError(call, e, id); } @Override public void onResponse(String response, int id) { //基類裡面通過一定的方式獲取子類傳遞的型別 //請求成功,將字串轉為javaBean,並獲取裡面的泛型為News的集合 Type type = BaseProtocol.this.getClass().getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType) type; Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); Type typeArgument = actualTypeArguments[0]; RESTYPE restype = (RESTYPE) XmlUtils.toBean((Class)typeArgument, response.getBytes()); //將轉換後的資料通過介面回撥,返回給呼叫方法的 callback.onResponse(restype, id); } }); } /** * 決定請求的url * 在BaseProtocol中不知道具體的實現 交給子類 * 子類必須實現,定義成為抽象方法 * @return */ protected abstract String getUrl() ; /** * 決定請求的引數 * 在BaseProtocol中不知道具體的實現 交給子類實現 * 子類必須實現 定義成抽象方法 * @return */ public HashMap<String,String> getParamsMap(){ return null; }; public interface Callback<RESTYPE> { void onError(Call call, Exception e, int id); void onResponse(RESTYPE restype, int id); } }

相關推薦

基於okHttpUtils網路請求抽取

二次封裝的功能 1,網路的get請求 2,Xml資料解析 封裝後,子類只需要實現的步驟 1,實現getUrl方法,提供一個請求的url地址 2,選擇性實現getParamsMap方法,提供一個請求引數的map集合,因為部分可能不需要引數 3,子類繼承

基於OkHttp網路通訊工具(傳送get、post請求、檔案上傳和下載)

一、為什麼要用OkHttp? okhttp是專注於提升網路連線效率的http客戶端。 優點: 1、它能實現同一ip和埠的請求重用一個socket,這種方式能大大降低網路連線的時間,和每次請求都建立socket,再斷開socket的方式相比,降低了伺服器伺服器的壓力。 2、okhttp 對

抽取http服務(網路判斷)資料庫多條目載入上拉載入下拉重新整理

//BaseActivity public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) {

抽取BaseActivity BaseFragment 簡單框架

佈局 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/re

Android : 抽取

需要的jar包 com.google.code.gson:gson:2.8.5 還有一個依賴類pulltolibrary xml的程式碼 <?xml version="1.0" encoding="utf-8"?> <android.support.c

簡單抽取+http服務+上拉載入下拉重新整理

//BaseActivity public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) {

網路請求工具

public class HttpUtils { public static String getStringFromHttp(String urlString) { String result = ""; try {

Android基於HttpURLConnection網路請求

HttpUrlConnection是繼承UrlConnection的抽象類,是Android網路請求的標準類,下面分別介紹如何利用HttpUrlConnetion進項get和post請求: 1.get請求 private void getDataFromNetGet(fin

網路請求工具和mvp的封裝

1.okhttp工具 public class OkHttpUtil { private static final String METHOD_GET = "GET"; private static OkHttpClient client; private sta

AsyncTask介面,網路請求,方法

public class HttpUtils { public static boolean isWork(Context context){ if(context!=null){ ConnectivityManager connectivit

【NCNN原始碼分析】2.網路

Layer類是所有其他網路層的一個基類,所有的網路層都會從Layer繼承,實現互異的計算過程,所有網路層的相似之處在於輸入輸出的規範以及前向傳播的過程。 Option是屬性類,lightmode表示輕量級模式在網路推理中會不斷地進行垃圾回收,num_thread

Android 原生HttpURLConnection網路請求工具(get post)

public class NetworkUtil { /* * 傳入一個Url地址 返回一個JSON字串 * 網路請求的情況分析: * 如果是404 500 .

iOS 【OC 封裝網路請求業務(AFHTTPSessionManager)】

由於AFNetworking底層請求由NSURLConnection更新為NSURLSession,管理者物件也由AFHTTPRequestOperationManager更新為AFURLSessionManager。 本文重點講述如何封裝AFN業務類,將第三方為程式帶來的

iOS 基於AF網路請求封裝的簡易思路

最近重新看了一下田神基於AF封裝的網路請求功能,略有所心得,想寫一些自己粗淺的心得,沒有那麼多專業術語,方便自己後面檢視封裝的思路! 網路請求,簡單的理解,就是一句話:構建client,然後發出請求,

簡單封裝網路請求工具

package com.mjd.imitate_jd.utils; import com.mjd.imitate_jd.api.GetInterface; import java.util.concurrent.TimeUnit; import okhttp3.OkHt

iOS開發總結之block回撥以AFN為基礎封裝的網路請求操作

1.#warning封裝網路請求類的好處 /**  *  1.專案存在問題,太依賴第三方框架。     2.為什麼要封裝網路請求:以後AFN升級,方法名改了,或者AFN淘汰了,直接改工具類就

小程式 網路請求工具

小程式自帶的網路請求,如圖下:在一個程式中網路請求是必須的,如果按照他的這個樣式寫,肯定程式碼多的不得了,所以我們將其進行一個簡單的封裝,話不多說直接切入正題:網路請求的樣式如何使用:1.首先要進行對我的工具類進行引入:2.呼叫方法3.如果你後臺想要表單的格式 或者是 jso

Http網路請求工具

public class HttpUtil { /** * 獲取網路圖片 * * @param imageurl 圖片網路地址 * @return Bitmap 返回網路上下載的圖片 */

網路請求工具之OkHttp3封裝(二)下(支援請求取消、非同步請求的執行緒切換)

緊接著上篇說的任務2:非同步請求採用UI執行緒回撥方式。 首先採用Handler進行執行緒間的通訊,順便優化下回調方法,加入HttpInfo以做到工具類使用的滲透性。 在OkHttpUtil中宣告一個自定義的非同步回撥介面,該介面對網路請求介面進行了封裝,使同步、非同步請求

Android網路請求工具

半個月前,讓給公司一個新模組建個專案,到現在這個專案結構還是有很多不足的地方。比如說資料的本地快取還有挺多的問題。 今天后臺伺服器的介面崩的很厲害,完全取不到資料,任務裡還有一個小模組的UI設計跟資料也不匹配只能先放著了 ,來寫幾篇blog吧 說了點廢話,開