美文网首页
Android MVP 模式介绍与示例

Android MVP 模式介绍与示例

作者: 五谷观精分道长 | 来源:发表于2016-11-25 09:57 被阅读73次

    MVP模式是什么?

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

    MVP与MVC区别

    一张图即可看懂


    图片来自互联网

    一个简单的示例NewsMvp

    整体类结构

    QQ截图20161125085423.png

    MVP模式结构

    1. Model: 业务逻辑和实体模型。
    2. View:用户交互和视图显示,在android中对应activity。
    3. 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

    相关文章

      网友评论

          本文标题:Android MVP 模式介绍与示例

          本文链接:https://www.haomeiwen.com/subject/axmipttx.html