MVP设计模式的写法
来源:互联网 发布:电脑修复软件 编辑:程序博客网 时间:2024/05/22 05:14
Android里面用到的页面数据交互设计模式主要有三类,主要是MVC、MVP、MVVM,我用的最多的就是MVP,我个人觉得MVP更容易让人理解,因为它的逻辑性比较严密,而且也方便后期的在开发,当然缺点就是要写多写很多类和多写很多代码
主要分为三大块:
model:负责数据,持久化等操作
view:界面,视图,负责UI的绘制和用户的交互
present:连接model和view的桥梁
这里举个例子,这里的网络数据获取用到了OKHttp,还有JSON数据解析,用到了GSON
compile ‘com.zhy:okhttputils:2.6.2’
compile ‘com.google.code.gson:gson:2.8.0’
新建三个包:model、view、present
然后就是建类了,model、present、view分别写一个接口,比如这里view:
public interface ArticleCommentsView { void showArticelComments(List<ResponseArticleComments.DataBean> dataBeen); void showNoMoreDatas(); void showError();}
model:
//由于这里我使用了OKhttp进行网络数据的获取,所以写了一个回掉
public interface ArticleCommentsModel { void loadDatas(String url, Callback callback); void loadNoMoreDatas(); public interface Callback{ void loadArticleCommentsDatas(List<ResponseArticleComments.DataBean> dataBeen); void loadNoMoreDatas(); void loadFailed(); }}
present:
public interface ArticleCommentsPresenter { void loadDatas();//如果有什么关键字要从后台给的接口中post给服务器,括号里面要添加变量 //void loadDatas(String content);}
然后就是需要写实体类去实现这三个接口
model:
public class ArticleCommentsModelImpl implements ArticleCommentsModel { @Override public void loadDatas(String url, final Callback callback) { OkHttpUtils.get().url(url).build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { callback.loadFailed(); } @Override public void onResponse(String response, int id) { ResponseArticleComments comments = JSON.parseObject(response, ResponseArticleComments.class); if(comments.getData().getTotal().equals("0")){ callback.loadNoMoreDatas(); return; } callback.loadArticleCommentsDatas(comments.getData().getData()); } }); } @Override public void loadNoMoreDatas() { }}
present://因为后台给的接口有页数,所以就添加了一个nextpage的翻页处理
public class ArticleCommentsPresenterImpl implements ArticleCommentsPresenter { private ArticleCommentsModel model; private ArticleCommentsView view; private int nextpage = 1; public ArticleCommentsPresenterImpl(ArticleCommentsView view) { this.view = view; this.model = new ArticleCommentsModelImpl(); } @Override public void loadDatas(String content) { String url = UrlHandler.handlUrl(Apis.ARTICLE_COMMENTS, nextpage, content); Log.d("ArticleCommentsPresente", url); model.loadDatas(url, new ArticleCommentsModel.Callback() { @Override public void loadArticleCommentsDatas(List<ResponseArticleComments.DataBean> dataBeen) { view.showArticelComments(dataBeen); } @Override public void loadNoMoreDatas() { view.showNoMoreDatas(); } @Override public void loadFailed() { view.showError(); nextpage --; } }); nextpage ++; } @Override public void refresh(String content) { }}
然后mvp这边就写完了,剩下的就是在activity或者fragment中去处理这些了
比如:
public class ArticleDetailsActivity extends BaseActivity implements ArticleCommentsView {.....}
这里只需要对present接口类定义全局变量,然后在onCreate中进行实例化
·commentsPresenter = new ArticleCommentsPresenterImpl(this);commentsPresenter.loadDatas();
然后在实现view的方法里面进行数据和页面的交互处理
大体上就是这样了哦,希望对你有所帮助,谢谢了
UrlHandler 类:
public class UrlHandler { /*** * http://cnblogs.davismy.com/Handler.ashx?op=GetTimeLine&channelpath={0}&page={1} * {"data/123","1"} */ public static final String handlUrl(String url,Object... params){ for (int i = 0; i < params.length; i++) { url = url.replace("{"+i+"}", params[i]+""); } return url; }}
阅读全文
0 0
- MVP设计模式的写法
- MVP设计模式的应用
- Android的MVP设计模式
- Android的设计模式MVP
- Android MVP设计模式的最佳实现
- MVP模式----登陆界面的设计
- Android MVP设计模式的理解
- MVC,MVP,MVVM设计模式的比较
- 关于MVP模式的使用设计
- mvp设计模式的个人理解
- 基于MVP设计模式的感想
- 设计模式——初识MVP的设计模式
- MVP设计模式-1
- MVP设计模式
- MVP设计模式思路
- Android MVP 设计模式
- MVP设计模式
- 理解MVP设计模式
- 文件描述符fd与FILE
- Java----匿名内部类与适配器模式
- 【转】OpenCV图像的轮廓的匹配
- Python运算符和表达式
- Java配置文档
- MVP设计模式的写法
- 数据结构与算法(22)——二叉搜索树
- HTTP Status 500
- h265 Nalu类型判断及 sps 数据解析
- java工具类——java将一串数据按照gzip方式压缩和解压缩
- java在线阅览pdf方法一:pdf.js
- 改变libreoffice的writer背景颜色
- openfire学习笔记二
- 无线智能风扇软件端APP设计