Android MVP 框架

為什么80%的碼農都做不了架構師?>>> ??hot3.png

前言

根據網絡上的MVP套路寫了一個辣雞MVP DEMO

用到的

  • android studio MVPHelper插件,方便自動生成框架代碼
  • rxjava
  • retrofit

什么是MVP

MVP就是英文的Model View Presenter,然而實際分包并不是只有這三個包,還有一個契約Contract接口包,根據項目情況還可以分更多包

  • Contract
  • Model
  • View 指activity和fragment,需要實現View接口
  • Presenter

Contract

定義Model、View、Presenter接口的方法,所有接口都在這里定義

public interface HomeContract {interface Model {void getDate(final BaseCallBack<TitleListBean> callBack);}interface View {//多個事件定義多個刷新頁面方法void refreshUi(List<TitleListBean.ContentsBean> list);}interface Presenter {void load();}
}

Model

網絡及本地數據請求操作,包括遠程數據和本地數據的請求處理
遠程數據用retrofit+rxjava實現,本地數據用room+rxjava,無論用什么方法最后都要通過callback返回結果

public class HomeModel implements HomeContract.Model {//獲取數據public void getDate(final PresenterBaseCallBack<TitleListBean> callBack) {ApiService apiService = RetrofitUtil.getRetorfit().create(ApiService.class);apiService.getList().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new BaseObserver<TitleListBean>() {@Overridepublic void onNext(TitleListBean model) {Log.d(TAG, "獲取數據成功 ");callBack.onResponse(model); //成功的數據請求結果}@Overridepublic void onError(Throwable e) {e.printStackTrace(); //請求過程中發生錯誤callBack.onFailure("獲取數據失敗"); //失敗的數據請求結果}@Overridepublic void onComplete() {Log.d(TAG, "刷新頁面 ");}});}
}

Presenter

可以理解為界面的點擊、加載等事件的實現
作為view與model的橋梁,初始化的時候需要傳入view對象和new一個model對象
通過view調用presenter,presenter調用model,model返回數據給presenter,presenter再返回數據給view展示

public class HomePresenter implements HomeContract.Presenter {private HomeContract.View homeView;private HomeContract.Model homeModel;private Context mContext;public HomePresenter(HomeContract.View view) {this.homeView = view;this.homeModel = new HomeModel();}@Overridepublic void load() {/*** Presenter層邏輯處理* Presenter已經包含model與view對象* 1.通過model獲取數據,new一個callback對象作為參數* 2.callback對象根據model返回的結果執行view的refreshUi方法刷新頁面*/this.homeModel.getDate(new PresenterBaseCallBack<TitleListBean>() {@Overridepublic void onResponse(TitleListBean response) {homeView.refreshUi(response.getContents());}@Overridepublic void onFailure(String error) {}});}
}

CallBack

這個接口屬于Presenter層,也是model與view的橋梁,把model處理的結果告訴presenter,presenter根據處理結果告訴view刷新頁面

public interface PresenterBaseCallBack<T> {void onResponse(T response);void onFailure(String error);
}

VIEW

創建presenter對象,view的所有事件就是對應presenter的方法

public class HomeFragment extends BaseFragment implements HomeContract.View {private HomeContract.Presenter presenter;@Overrideprotected void initView(Bundle savedInstanceState) {presenter = new HomePresenter(this,getContext());   //初始化Presenter,包含view和modelpresenter.load();                                   //Presenter層邏輯處理}@Overridepublic void refreshUi(List<TitleListBean.ContentsBean> list) {  //數據獲取成功后的頁面刷新//list 就是返回的數據,執行頁面刷新}
}

一個辣雞Demo

戳這里

轉載于:https://my.oschina.net/AStar/blog/2244802

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389508.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389508.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389508.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

相似圖像搜索的哈希算法思想及實現(差值哈希算法和均值哈希算法)

圖像相似度比較哈希算法: 什么是哈希&#xff08;Hash&#xff09;&#xff1f; ? 散列函數&#xff08;或散列算法&#xff0c;又稱哈希函數&#xff0c;英語&#xff1a;Hash Function&#xff09;是一種從任何一種數據中創建小 的數字“指紋”的方法。散列函數把消息或數…

騰訊云AI應用產品總監王磊:AI 在傳統產業的最佳實踐

歡迎大家前往騰訊云社區&#xff0c;獲取更多騰訊海量技術實踐干貨哦~ 背景&#xff1a;5月23-24日&#xff0c;以“煥啟”為主題的騰訊“云未來”峰會在廣州召開&#xff0c;廣東省各級政府機構領導、海內外業內學術專家、行業大咖及技術大牛等在現場共議云計算與數字化產業創…

標準化(Normalization)和歸一化實現

概念&#xff1a; 原因&#xff1a; 由于進行分類器或模型的建立與訓練時&#xff0c;輸入的數據范圍可能比較大&#xff0c;同時樣本中各數據可 能量綱不一致&#xff0c;這樣的數據容易對模型訓練或分類器的構建結果產生影響&#xff0c;因此需要對其進行標準 化處理&#x…

Toast源碼深度分析

目錄介紹 1.最簡單的創建方法 1.1 Toast構造方法1.2 最簡單的創建1.3 簡單改造避免重復創建1.4 為何會出現內存泄漏1.5 吐司是系統級別的 2.源碼分析 2.1 Toast(Context context)構造方法源碼分析2.2 show()方法源碼分析2.3 mParams.token windowToken是干什么用的2.4 schedul…

序列化框架MJExtension詳解 + iOS ORM框架

當開發中你的模型中屬性名稱和 字典(JSON/XML) 中的key 不能一一對應時, 或者當字典中嵌套了多層字典數組時..., 以及教你如何用 MJExtension 配置類來統一管理你的模型配置, 下面羅列了開發中常見的一些特殊情況, 請參考!(MJExtension/github) 最基本用法: // 將字典轉為模型 …

運行keras出現 FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated解決辦法

運行keras出現 FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy, 原則來說&#xff0c;沒啥影響&#xff0c;還是能運行&#xff0c;但是看著難受 解決辦法&#xff1a; 點擊藍色的鏈接&#xff1a; 進入 …

RedirectToAction()轉移方式及參數傳遞

今天在做一個功能的時&#xff0c;使用RedirectToAction()需要從這里傳幾個參數&#xff0c;從網上查了一下&#xff0c;這樣解決。真好。 Return RedirectToAction("Index","ManageInfo",new{type0,page1});轉載于:https://www.cnblogs.com/ZaraNet/p/978…

軟件項目風險管理

近幾年來軟件開發技術、工具都有了很大的進步&#xff0c;但是軟件項目開發超時、超支、甚至不能滿足用戶需求而根本沒有得到實際使用的情況仍然比比皆是。軟件項目開發和管理中一直存在著種種不確定性&#xff0c;嚴重影響著項目的順利完成和提交。但這些軟件風險并未得到充分…

mongdb 群集_群集文檔的文本摘要

mongdb 群集This is a part 2 of the series analyzing healthcare chart notes using Natural Language Processing (NLP)這是使用自然語言處理(NLP)分析醫療保健圖表筆記的系列文章的第2部分。 In the first part, we talked about cleaning the text and extracting sectio…

keras框架實現手寫數字識別

詳細細節可學習從零開始神經網絡&#xff1a;keras框架實現數字圖像識別詳解&#xff01; 代碼實現&#xff1a; [1]將訓練數據和檢測數據加載到內存中(第一次運行需要下載數據&#xff0c;會比較慢): &#xff08;mnist是手寫數據集&#xff09; train_images是用于訓練系統…

gdal進行遙感影像讀寫_如何使用遙感影像進行礦物勘探

gdal進行遙感影像讀寫Meet Jose Manuel Lattus, a geologist from Chile. In the latest Soar Cast, he discusses his work in mineral exploration and environmental studies, and explains how he makes a living by creating valuable information products based on diff…

從零開始神經網絡:keras框架實現數字圖像識別詳解!

接口實現可參考&#xff1a;keras框架實現手寫數字識別 思路&#xff1a; 我們的代碼要導出三個接口&#xff0c;分別完成以下功能&#xff1a; 初始化initialisation&#xff0c;設置輸入層&#xff0c;中間層&#xff0c;和輸出層的節點數。訓練train:根據訓練數據不斷的更…

大數據學習第一貼

搞了這么久的開發&#xff0c;一直沒有養成發博客的習慣&#xff0c;今天開始對大數據所需內容進行總結性記錄&#xff0c;并對以后遇到的問題形成一個自己的知識庫。就這些&#xff01;轉載于:https://blog.51cto.com/13921538/2299765

推薦算法的先驗算法的連接_數據挖掘專注于先驗算法

推薦算法的先驗算法的連接So here we are diving into the world of data mining this time, let’s begin with a small but informative definition;因此&#xff0c;這一次我們將進入數據挖掘的世界&#xff0c;讓我們從一個小的但內容豐富的定義開始&#xff1b; 什么是數…

Android 頁面多狀態布局管理

一、現狀 頁面多狀態布局是開發中常見的需求&#xff0c;即頁面在不同狀態需要顯示不同的布局&#xff0c;實現的方式也比較多&#xff0c;最簡單粗暴的方式就是在 XML 中先將不同狀態對應的布局隱藏起來&#xff0c;根據需要改變其可見狀態&#xff0c;如果多個界面公用相同的…

Tensorflow入門神經網絡代碼框架

Tensorflow—基本用法 使用圖 (graph) 來表示計算任務.在被稱之為 會話 (Session) 的上下文 (context) 中執行圖.使用 tensor 表示數據.通過 變量 (Variable) 維護狀態.使用 feed 和 fetch 可以為任意的操作(arbitrary operation)賦值或者從其中獲取數據。 ? TensorFlow 是一…

手把手教你把代碼丟入github 中

手把手教你把代碼丟入github 中 作為一個小運維一步步教你們怎么把代碼放入到github 中 首先呢我們下載一個git的客戶端 https://git-scm.com/downloads/ 下載一個最新版的2.16.2 下載后那就安裝吧。如果看不懂英文就選擇默認安裝的方式吧。但是你得記住你的軟件安裝的位置 小…

時間序列模式識別_空氣質量傳感器數據的時間序列模式識別

時間序列模式識別 1. Introduction 2. Exploratory Data Analysis ° 2.1 Pattern Changes ° 2.2 Correlation Between Features 3. Anomaly Detection and Pattern Recognition ° 3.1 Point Anomaly Detection (System Fault) ° 3.2 Collective Anomaly Detection (Externa…

oracle 性能優化 07_診斷事件

2019獨角獸企業重金招聘Python工程師標準>>> 一、診斷事件 診斷事件無官方技術文檔支持&#xff0c;使用存在風險&#xff0c;慎用。使用診斷事件可以獲取問題更多的信息&#xff0c;調整系統運行 特性&#xff0c;啟用某些內部功能。用于系統故障的診斷。跟蹤應…

Tensorflow框架:卷積神經網絡實戰--Cifar訓練集

Cifar-10數據集包含10類共60000張32*32的彩色圖片&#xff0c;每類6000張圖。包括50000張訓練圖片和 10000張測試圖片 代碼分為數據處理部分和卷積網絡訓練部分&#xff1a; 數據處理部分&#xff1a; #該文件負責讀取Cifar-10數據并對其進行數據增強預處理 import os impo…