mvp架构 java_GitHub - AnthonyCoder/MvpForJava: 一个可直接快速引入的 Java 版本的模块化 MVP 框架...
使用Java構建的一個模塊化的MVP的項目
個人項目僅供學習使用,感謝以下開放Api:
Demo簡介
該 Demo 更加詳細的封裝思路,請點擊文章如何既裝逼又優(yōu)雅的設計一個模塊化的MVP架構
提供給初中級開發(fā)者學習模塊化的項目結構搭建
幫助開發(fā)者快速開發(fā),demo很多地方可以靈活配置,可直接clone本項目到本地進行項目創(chuàng)建
本Java版本項目也同時依賴了Kotlin,并僅在view層(Activity/Fragment)內(nèi)使用了Kotlin編寫,方便開發(fā)者后期混合編程或者轉向Kotlin開發(fā),為此我還同時寫了一個純Kotlin版本的Demo,感興趣的朋友可以點擊看看
希望路過的各位開發(fā)好漢,覺得不錯的幫忙點個Star,謝謝~~
功能預覽:
主要開源框架:
特點功能
項目架構使用了符合絕大部分項目使用的 MVP 架構模式,并使用模塊化設計方便多人維護
使用了目前最流行的 RxJava2+Retrofit2+Okhttp3 作為網(wǎng)絡框架搭建
支持多BaseUrl(多服務器地址)訪問接口,開發(fā)者可自行擴展
同時支持表單提交、raw提交,并自動解析提交數(shù)據(jù)和返還數(shù)據(jù)
支持 header 的動態(tài)添加
支持對前后端約定的業(yè)務碼進行統(tǒng)一形式(邏輯處理、通知view)處理,如 code=311,則是對Token過期處理等
支持請求(請求參數(shù)、header)、響應信息(響應狀態(tài)、響應的json數(shù)據(jù))的打印
支持自定義網(wǎng)絡請求異常信息
支持 https 證書的自定義配置
使用比 RxLifecycle 庫更加優(yōu)秀的 AutoDispose 庫作為解決在 View 生命周期的變化中造成的內(nèi)存泄漏問題
使用 Arouter 庫作為項目路由,作為模塊之間的通信橋梁
使用 騰訊X5內(nèi)核瀏覽器 替代原生WebView加載網(wǎng)頁
項目中封裝了一個帶狀態(tài)的 RecyclerView,如錯誤頁面、空頁面狀態(tài)展示,開發(fā)者可以根據(jù)項目情況自行擴展使用
基礎MVP項目架構圖
網(wǎng)絡框架UML圖
lib依賴關系
快速集成到新項目中使用
1.clone到本地后,復制config.gradle文件,然后在項目build.gradle中引入config.gradle
apply from: "config.gradle"
2.復制 common 模塊并添加到項目中,然后業(yè)務模塊依賴common模塊
3.創(chuàng)建View層Activity繼承BaseActivity,同時綁定Presenter
4.創(chuàng)建Contact接口類,約定View層接口和Presenter層接口
5.創(chuàng)建Presenter實現(xiàn)類,在Presenter實現(xiàn)類里面處理邏輯,通過傳遞進來的View實例通知View層
調(diào)用示例
1.普通 Get 請求提交示例:
WanAndroidFormRequestClient.getInstance().executeGet(UrlConstant.GET_BANNER_JSON, null, new AppObserver(view,true) {
@Override
public void onNext(BannerResult bannBannerResulterResults) {
super.onNext(bannBannerResulterResults);
view.onBanner(bannerResults.getData());
}
});
2.普通 Post 請求提交示例:
HashMap params = new HashMap<>();
params.put("id",id+"");
params.put("udid","d2807c895f0348a180148c9dfa6f2feeac0781b5");
BaobabFormRequestClient.getInstance().executePost(UrlConstant.POST_CATEGORIES_VIDEO_LIST, params, new AppObserver(view) {
@Override
public void onNext(VideoListResult videoListResult) {
super.onNext(videoListResult);
view.setVideoList(videoListResult.getItemList());
}
});
3.帶 Header 的 Get 請求提交示例(Post 類似):
HashMap headers = new HashMap<>();
headers.put("token","hosdbdkasdnfdfl");
WanAndroidFormRequestClient.getInstance().executeGetWithHeader(headers,UrlConstant.GET_BANNER_JSON, null, new AppObserver(view,true) {
@Override
public void onNext(BannerResult bannerResults) {
super.onNext(bannerResults);
view.onBanner(bannerResults.getData());
}
});
4.若請求不需要綁定 AutoDispose 來干預訂閱者的調(diào)用的時候,可如下方式使用(傳入 AppObserver 的構造函數(shù)控制):
WanAndroidFormRequestClient.getInstance().executeGet(UrlConstant.GET_BANNER_JSON, null, new AppObserver(view,false) {
@Override
public void onNext(BannerResult bannerResults) {
super.onNext(bannerResults);
view.onBanner(bannerResults.getData());
}
});
一些問題
1.ARoter報錯
先檢查一下所有模塊是否都在build.gradle文件中添加了
apply plugin: 'kotlin-kapt'
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
若項目未使用Kotlin則以上代碼換做
android {
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
}
檢查如果以上問題不存在的話,再檢查是否每個模塊都直接依賴了arouter-compiler,必須是直接依賴。
依賴代碼如下:
java版本
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
kotlin版本
kapt 'com.alibaba:arouter-compiler:x.x.x'
感謝
總結
以上是生活随笔為你收集整理的mvp架构 java_GitHub - AnthonyCoder/MvpForJava: 一个可直接快速引入的 Java 版本的模块化 MVP 框架...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 方法 参数 引用_Java 基
- 下一篇: java引用类型和值类型_[Java教程