最近寫了一份demo,整理了下最近使用的框架,首先介紹下體系唄:
Mvp:一種衍生於mvc的設計模式,比mvc的優點好處在於m跟v分離的明確,m只負責data,v只負責view顯示,p負責獲取data給v進行顯示。當然現在有更好的mvvm設計模式,mvp只屬於mvvm的一箇中間版,但是對於正常的項目應用是夠用了,筆者對於mvvm的使用較少,等有空的時候會多研究下。
Retrofit+rxjava2:爲啥不用okgo或者okhttp,他們的作者是相同的,可能是因爲retrofit一直在更新的原因吧。。。Okhttp已經2年沒更新了,retrofit用的更廣泛,遇到問題解決起來可能也會更方便,在數據安全上也更有保障。
Glide:近幾年挺火的一款圖片加載框架,優點在於可以緩存跟預加載。
先來說下mvp框架吧:
具體代碼如下:
public interface SearchContract {
interface View extends BaseView<SearchContract.Presenter> {
void showImageInfo(List<ImageBean.ListBean> list);
}
interface Presenter extends BasePresenter {
void loadImageInfo(String location);
}
}
可以看到 我們創建了一個關聯類,View跟presenter,分別對應mvp中的v跟p,用我們的Activity或者fragment 來實現view,然後p來實現定義好的presenter。
相關實現如下:
P:
public class SearchPresenter implements SearchContract.Presenter { private static final String TAG = SearchPresenter.class.getSimpleName(); private Context mContext; private SearchContract.View mSearchView; private WorkRepositoryImpl mWork; private String mLocation; public SearchPresenter(Context context, SearchContract.View view, String location) { mContext = context; mSearchView = view; mLocation = location; mWork = WorkRepositoryImpl.getInstance(); }
v:
public class SearchActivity extends BaseActivity implements SearchContract.View {
@Override public void showImageInfo(List<ImageBean.ListBean> beanList) { }
}
好了 這樣我們mvp體系已經搭建完畢,在p中可以進行數據交互,把從服務器獲取的數據或本地數據庫獲取的數據傳遞給view進行使用,view只負責顯示,數據的獲取一定要在p中進行哦,否則就是mvc了。。。
總結:與mvc相比,mvp通過p把v跟m分離,使代碼更清晰,比如數據方面出了問題,直接去找m,界面出了問題直接去找v,這樣定位問題,解決問題會更加效率。
隨後,我們來講下retrofit+rxjava2:
老規矩先上代碼:
/** * 初始化Retrofit */ public Api initRetrofit() { Retrofit mRetrofit = new Retrofit.Builder() .client(XyxApplication.initOKHttp()) // 設置請求的域名 .baseUrl(ApiAddress.URL) // 設置解析轉換工廠 .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); return mRetrofit.create(Api.class); }
@GET Observable<ImageBean> getImageInfo(@Url String url);
上邊兩個分別是初始化retrofit和,rxjava2註解。這樣我們的三劍客已經齊備。
相關demo下載連接:https://download.csdn.net/download/qq_36118367/12328027
引入Glide加載就好啦,相關緩存、預加載的內容有空我會重新寫一份~~
Demo做的比較着急,框架搭好後,其他的就可以自由發揮了。
效果: