MVP模式是什么?
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
MVP与MVC区别
一张图即可看懂
图片来自互联网
一个简单的示例NewsMvp
整体类结构
QQ截图20161125085423.png
MVP模式结构
- Model: 业务逻辑和实体模型。
- View:用户交互和视图显示,在android中对应activity。
- Presenter: 负责完成View于Model间的逻辑和交互。
MVP模式.png
<接口是为了提高代码的可用性,可以不使用>
核心代码
Model层获取网络数据:
public class NewsModel implements InNewsModel {
News news;
@Override
public News getNews() {
new Thread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
news=gson.fromJson(HttpGet.request(""),News.class);
// Log.d("xx", news.getNewslist().get(0).getTitle());
}
}).start();
//主线程等待一秒
sleep(1000);
// Log.d("", news.getNewslist().get(0).getTitle());
return news;
}
}
View层把view传到Presenter层,并且加载从Presenter层获取的数据
mNewsPresenter = new NewsPresenter(this);
mNewsPresenter.loadNews();
@Override
public void addNews(News news) {
lv = (ListView) findViewById(R.id.listview);
// Log.d("xx",news.getNewslist().get(0).getTitle());
SimpleAdapter adapter = new SimpleAdapter(this, getData(news),
R.layout.listview_item, new String[]{"img", "title", "info"},
new int[]{R.id.img, R.id.title, R.id.info});
lv.setAdapter(adapter);
}
private List<Map<String, Object>> getData(News news) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
for (News.NewslistBean newslistBean : news.getNewslist()) {
map = new HashMap<String, Object>();
map.put("img", R.drawable.ic_menu_camera);
map.put("title", newslistBean.getTitle());
map.put("info", newslistBean.getDescription());
list.add(map);
}
return list;
}
Presenter层通过NewsModel获取数据传给View层
@Override
public void loadNews() {
//通过调用IInfoView的方法来更新显示,设计模式运用
//类似回调监听处理
mInNewsView.addNews(mNewsModel.getNews());
}
2016-11-24-9423b24e9f46bbbc53741289a5134728.png
关于接口调用失败,我测试发现天行数据失败。到后台发现原来是请求的次数超过上限了。(主要是大家用的都是我的账号,10000次请求分分钟就没了),所以各位可以自行申请账号。
QQ截图20161125095311.png
示例项目地址:https://github.com/HuRuWo/NewsByMVP
QQ截图20161125103332.png










网友评论