如何優雅的快速搭建MVVM項目-MVVMFramework系列教程(二)

上一章講到BaseViewModel中幾個狀態,而通常這幾個狀態都是根據網絡返回情況來判斷的,建立一個基類寫一個通用的網絡回調的話,就能把各種狀態設置好,不用在每個具體實現的類里重復去設置了。

Retrofit

網絡庫集成了Retrofit,我們通過繼承Retrofit的Callback來實現自己的HttpServiceCallBack抽象類,在HttpServiceCallBack 里面定義onHttpSuccess,onHttpFail,onNetWorkError,onHttpComplete,在具體實現中設置對應的狀態。

public abstract class HttpServiceCallBack<T> implements Callback<HttpResult<T>> {
    @Override
    public void onResponse(Call<HttpResult<T>> call, Response<HttpResult<T>> response) {

        HttpResult<T> result = response.body();

        if (result == null) {
            //通常是服務器出錯返回了非約定格式
            onHttpFail(response.code(),"網絡錯誤,請稍后再試");
        } else {
            if (result.getCode() == HttpStatusConstants.RESULT_OK) {
                //正確返回約定的OK碼
                onHttpSuccess(result.getContent(),result.getMsg());
            }
            else {
                //返回約定的其他類型碼,可根據返回碼進行相對應的操作
                onHttpFail(result.getCode(),result.getMsg());
            }
        }
        onHttpComplete();
    }

    @Override
    public void onFailure(Call<HttpResult<T>> call, Throwable t) {
        //網絡異常或json解析失敗
        onNetWorkError();
        onHttpComplete();
    }

    public abstract void onHttpSuccess(T resultData,String msg);
    public abstract void onHttpFail(int code, String msg);
    public abstract void onNetWorkError();
    public abstract void onHttpComplete();
}

上面HttpResult是接口對應統一返回格式

//content里面是json格式代表詳情
{"code":0,"msg":"獲取詳情成功","content":{"productId":"1200001","spotName":"門票名稱"}}
//或者content里面是jsonArray格式代表列表
{"code":0,"msg":"獲取詳情成功","content":[{"productId":"1200001","spotName":"門票名稱1"},{"productId":"1200002","spotName":"門票名稱2"}]}

具體請求數據請去看Retrofit的用法,相信大部分人都已經在用Retrofit了,在這里不做太多解釋。

通過上面自定義的HttpServiceCallBack,我們可以很輕松的去做斷點查看數據,因為我們之后所有的網絡請求返回結果都是通過HttpServiceCallBack。

Github

MVVMFramework

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容