ApiMock:基於Retrofit2+Rxjava2模擬api資料請求
為什麼要用apimock
在Android日常開發中,我們使用retrofit+Rxjava獲取介面資料。使用apimock有以下好處:
- Android UI需求開發完成了,可以不用等待後臺介面釋出即可根據已定好的資料結構模擬資料進行聯調。
- 方便mock出你想要的各種場景資料,快速驗證不同場景下展現不同的介面。真正實現與後端進行並行工作。
使用場景: Retrofit2 + Rxjava2。
如何使用ApiMock
-
在需要模擬資料的module中新增依賴:
dependencies { implementation 'com.android.util:apimock:1.0.1' }
注意: 專案需要引入以下庫(版本號可不一致):
implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation "io.reactivex.rxjava2:rxjava:2.1.14" implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
-
在Application的onCreate方法中初始化,方法如下:
ApiMock.init(this, "mockdata.json");
或者
ApiMock.init(this, "mockdata.json","http://10.181.52.38:8081/html/mockdata.json");
/** * 初始化mock資料來源 * @param context * @param fileNameassets資料夾下檔名稱 * @param mockDataUrl遠端mockdata檔案地址(不填或者為空則預設從本地assets獲取) */ public static void init(Context context, String fileName, String mockDataUrl)
其中的
mockdata.json
檔案是定義在assets資料夾下的mock資料, 第三個引數mockDataUrl
是模擬資料存放的遠端地址(比如存放在遠端或者本地伺服器中),不填或者為空則預設從本地assets獲取。模擬資料檔案
mockdata.json
格式如下(欄位名稱可根據需要修改):(此處的common/getversion 是指對應Retrofit中註解的api的path部分){ "common/getversion": { "code": 200, "message": "測試一下", "data": { "version": "5.2.0", "url": "http://test.com/test.apk", "description": "1.全新UI體驗\r\n2.優化效能,修復已知問題", "forceUpdate": false } } }
-
在專案中使用apimock去模擬需要的資料
ApiMock.getApiService(Constants.BASE_URL, ApiService.class) .getversion() .subscribe(new Consumer<BaseResponse<VersionInfoEntity>>() { @Override public void accept(BaseResponse<VersionInfoEntity> versinfon) throws Exception { Toast.makeText(MainActivity.this, versinfon.data.toString(), Toast.LENGTH_SHORT).show(); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Toast.makeText(MainActivity.this, "onFailure:"+throwable.getLocalizedMessage(), Toast.LENGTH_SHORT).show(); } });