retrofit rx 一次封裝多次呼叫統一處理

2021-07-31 21:33:19 字數 3518 閱讀 9709

public

inte***ce

baseapiservice

使用泛型定義請求介面get、post、、、,好處是不管api有多少我們都可以走乙個通道,不用重新寫方法,處理思路是gosn解析:

在service中定義預設返回http3的response,在apimanager中定義乙個轉換observable方法,把response.string返回內容使用gson進行包裝。根據傳來的引數型別,使用rx操作符flatmap進行轉換我們對應的s實體型別。

public

class

baseapimanager

public

static

synchronized baseapimanager getapi()

return instance;

}/**

* 執行網路請求

*@param url 已經指定了base url 可以傳目錄

*@param querymap 請求引數

*@param tclass 返回物件的泛型

*@param

泛型 *@return 具體observable 物件

*/public

observableexecuteget(string url, final classtclass, hashmapquerymap) catch (ioexception e)

return createobserver(t);

}});

return ob.subscribeon(schedulers.io()).observeon(androidschedulers.mainthread());

}/**

* 執行網路請求

*@param url 已經指定了base url 可以傳目錄

*@param tclass 返回物件的泛型

*@param

泛型 *@return 具體observable 物件

*/public

observableexecuteget(string url, final classtclass) catch (ioexception e)

return createobserver(t);

}});

return ob.subscribeon(schedulers.io()).observeon(androidschedulers.mainthread());

}/**

* 執行網路請求

*@param url 已經指定了base url 可以傳目錄

*@param querymap 請求引數

*@param tclass 返回物件的泛型

*@param

泛型 *@return 具體observable 物件

*/public

observableexecutepost(string url, final classtclass, hashmapquerymap) catch (ioexception e)

return createobserver(t);

}});

return ob.subscribeon(schedulers.io()).observeon(androidschedulers.mainthread());

}/**

* 建立乙個泛型的observable

*@param t 泛型

*@param

observable 返回指定的泛型

*@return

*/private

observablecreateobserver(final t t) else

subscriber.oncompleted();

}});

}}

使得我們需要請求返回的物件都繼承該類,以便網路請求有的地方統一處理

public

class

baseresponse

public

void

setmessage(string message)

public

intgetresult()

public

void

setresult(int result)

public

intgetcode()

public

void

setcode(int code)

public

boolean

isok()

}

/**

* created by administrator on 2017/1/9 0009.

*/public

class

basesubscriber

extends

baseresponse> extends

subscriber }

private toast toast;

private

void showtoast(string msg,boolean notifynetwork)

if (toast== null) else

toast.show();

log.i(tag, msg);

}@override

public

void onstart()

if (dialog != null)

}@override

public

void oncompleted()

}@override

public

void onerror(throwable e) catch (ioexception e1) }}

@override

public

void onnext(t t)else

}public

inte***ce

callback

}

hashmapmap = new hashmap<>();

map.put("phone",shareutils.getuserphone());

map.put("password", shareutils.getpassword());

map.put("logindevice", "android");

baseapimanager.getapi().executepost("login",userbean.class,map)

.subscribe(new basesubscriber(null,new basesubscriber.callback

() @override

public void failure(string failure, int code, int result)

}));

perl 多檔案一次更新

1 寫 將 argv的所有檔案的內容中xyz全部更新為uiui,並且在更新前進行備份,比如說deep txt多個檔案備份為deep txt.bak i完成備份副檔名的設定。use strcit i bak while s xyz uiui g print 2 直接使用命令列執行以上功能 perl p...

feof多讀一次問題分析

在讀完檔案的最後乙個字元後,fp flag仍然沒有被置為 ioeof,因而feof 仍然沒有探測到檔案結尾。直到再次呼叫fgetc 執行讀操作,feof 才能探測到檔案結尾。這樣就多執行了一次。對於feof 這個函式,它是先讀再判斷是否到檔案尾,也就是說在它之前一定要讀一次才能做出判斷。而我們經常這...

如何一次轉換多篇文件?

有時我們需要一次轉換多篇文件,比如將html檔案轉為word檔案,或是將word檔案轉為txt格式的檔案等,可以用下面的方法,圖中的例子是將很多wps 2000編輯的檔案一次轉換為word 2000格式的檔案。將要轉換的檔案放在同乙個資料夾中,然後單擊 檔案 選單中的 新建 命令,單擊 其他文件 選...