Android MVP 实例
来源:互联网 发布:python 2.7 re.compile 编辑:程序博客网 时间:2024/04/27 14:26
前段时间Google在Github推出了一个项目,专门展示Android引用各种各样的MVP架构,算是官方教程了。趁着还新鲜,让我们来抛砖引玉一探究竟,看看在Google眼里什么样算是好的MVP架构。
Android官方MVP架构示例项目解析
作者 吕英斌 发布于 2016年4月29日 | 被首富的“一个亿”刷屏?不如定个小目标,先把握住QCon上海的优惠吧! 2 讨论
分享到:微博微信FacebookTwitter有道云笔记邮件分享"稍后阅读""我的阅读清单"前段时间Google在Github推出了一个项目,专门展示Android引用各种各样的MVP架构,算是官方教程了。趁着还新鲜,让我们来抛砖引玉一探究竟,看看在Google眼里什么样算是好的MVP架构。
App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP、MVVM、Clean这三种。google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式,期望能留给开发者更多的灵活性。
由于没有一套权威的架构实现,现在很多App项目中在架构方面都有或多或少的问题。第一种常见问题是没有架构,需求中的一个页面对应项目中的一个activity或一个fragment,所有的界面响应代码、业务逻辑代码、数据请求代码等等都集中在其中。第二种常见的问题是架构实现的不断变化,不断在各种架构间摇摆,一直找不到一个适合自己的架构。
下面我们来说说MVP吧
一个关于天气的小例子
架构分包如下
说明:请求网络使用async-http
MainActivity.java
public class MainActivity extends AppCompatActivity implements MainView { ProgressBar mProgressBar; TextView text; MainPresenter mMainPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { text = (TextView) findViewById(R.id.text); mProgressBar = (ProgressBar) findViewById(R.id.mProgressBar); mMainPresenter = new MainPresenter(); mMainPresenter.attachView(this); mMainPresenter.loadData(); } @Override protected void onDestroy() { mMainPresenter.detachView(); super.onDestroy(); } @Override public void showData(MainModel mainModel) { text.setText("城市:" + mainModel.getCity() + "\n风向:" + mainModel.getWd() + "\n风级:" + mainModel.getWs() + "\n发布时间:" + mainModel.getTime()); } @Override public void showProgress() { mProgressBar.setVisibility(View.VISIBLE); } @Override public void hideProgress() { mProgressBar.setVisibility(View.GONE); }}
基础建筑
MVP之M,
这个除了一下getter和setter之外不能有什么东西了,切记,这儿和MVC其实是差不多的
MainModel.java
public class MainModel { String city; String wd; String ws; String time; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getWd() { return wd; } public void setWd(String wd) { this.wd = wd; } public String getWs() { return ws; } public void setWs(String ws) { this.ws = ws; } public String getTime() { return time; } public void setTime(String time) { this.time = time; }}
核心重点
MVP之P
MainPresenter.java
//业务具体处理public class MainPresenter implements Presenter<MainView> { private MainView mMainView; @Override public void attachView(MainView view) { this.mMainView = view; } public void loadData() { mMainView.showProgress(); AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); asyncHttpClient.get("http://www.weather.com.cn/adat/sk/101010100.html", new JsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { super.onSuccess(statusCode, headers, response); try { MainModel mainModel = new MainModel(); JSONObject weatherinfo = response.getJSONObject("weatherinfo"); mainModel.setCity(weatherinfo.getString("city")); mainModel.setWd(weatherinfo.getString("WD")); mainModel.setWs(weatherinfo.getString("WS")); mainModel.setTime(weatherinfo.getString("time")); mMainView.showData(mainModel); mMainView.hideProgress(); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); mMainView.hideProgress(); } }); } @Override public void detachView() { this.mMainView = null; }}
Presenterpublic interface Presenter<V> { void attachView(V view); void detachView();}
可见之基
MVP之V
MainView.java
//处理业务需要哪些方法public interface MainView { void showData(MainModel mainModel); void showProgress(); void hideProgress();}
PS
使用mvp时,Activity和Fragment变成了view层的一部分而把绝大多数工作代理给了presenter。每一个Activity都有一个相应的presenter来处理数据进而获取model。
- 简单Android MVP 实例
- Android MVP 实例运用
- Android MVP 实例
- Android MVP 实例
- android mvp实例
- Android MVP 实例
- 吴小龙的 mvp Android MVP 实例
- Android架构:MVP模式实例
- Android MVP开发模式实例
- android MVP开发模式实例
- Android MVP 模式应用实例
- Android中MVP实现实例
- Android 简单的MVP实例
- Android中MVP设计模式实例
- android中MVP的理解和实例
- Android应用架构之MVP--->天气实例
- MVP模式在Android中的应用实例
- Android中的MVC和MVP(分析+实例)
- NOIP初赛准备:第四课时
- 我们三十以后才明白
- 上级5
- UI设计之“Banner”高大上的花边设计
- select上添加onchange函数
- Android MVP 实例
- 开源库分享__二维码生成(QRCode2)
- 移动构造函数与移动赋值运算符
- 毕业后100天
- 适配器中进行Activity之间的跳转
- 梅森素数(Mersenne)
- arm-linux-gcc交叉编译器和gcc编译器的下载地址
- HDU1166:敌兵布阵(线段树 单点更新)
- java Class对象详解