打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[Android] Android MVP 架构下 最简单的 代码实现

首先看图:

上图是MVP,下图是MVC

MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互。而在mvp中,view层只和presenter层交互,而model层也和presenter交互,presenter构成了view层和model层的桥梁,也解耦了view层和model层。这一点很关键。我认为,这也是mvp的本质:

解耦view层和model层,让view层和model层通过presenter层进行通信。换个说法就是让诸如网络请求,数据库读写的逻辑,从activity中剥离出来。activit只负责页面的展示,不关心model层的逻辑。

简单的MVP模式,3个class 和 1个interface 就可以实现

各文件主要功能如下:

1个interface:定义activity 要实现的回调方法

3个class:1个Model层定义文件   1个业务逻辑 Presenter文件  1个Activity文件

列举实现代码

1)interface定义文件

MainCallBack.java

package com.jack.basemvp.basemvp;/** * 定义要实现的回调方法 */public interface MainCallBack {    void getMessage(String message);    void error();}

2)Model层文件

MainModel.java

package com.jack.basemvp.basemvp;import okhttp3.Call;import okhttp3.OkHttpClient;import okhttp3.Request;/** * 定Model */public class MainModel {    public Call getData(String url) {        OkHttpClient client = new OkHttpClient();        Request request = new Request.Builder().url(url).build();        return client.newCall(request);    }}

3)Presenter层文件

MainPresenter.java

package com.jack.basemvp.basemvp;import android.support.annotation.NonNull;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;/** * 定义业务逻辑 Presenter */public class MainPresenter {    private MainCallBack callBack;    private MainModel model;    public MainPresenter(MainCallBack callBack) {        this.callBack = callBack;        model=new MainModel();    }    public void getUrlData(String url){        model.getData(url).enqueue(new Callback() {            @Override            public void onFailure(@NonNull Call call, @NonNull IOException e) {                callBack.error();            }            @Override            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {                callBack.getMessage(response.body().string());            }        });    }}

4)activity调用

SimpleMvpActivity.java

package com.jack.basemvp.activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import com.jack.basemvp.R;import com.jack.basemvp.basemvp.MainCallBack;import com.jack.basemvp.basemvp.MainPresenter;import java.lang.ref.WeakReference;public class SimpleMvpActivity extends AppCompatActivity implements View.OnClickListener,MainCallBack{    public EditText simple_et;    Button btn_submit_req;    TextView simple_tv;    private MainPresenter presenter;    private MyHandler handler;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_simple_mvp);        simple_et = (EditText) findViewById(R.id.simple_et);        btn_submit_req = (Button) findViewById(R.id.btn_submit_req);        simple_tv = (TextView) findViewById(R.id.simple_tv);        handler = new MyHandler(this);        presenter = new MainPresenter(this);        btn_submit_req.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btn_submit_req:                String url = simple_et.getText().toString();                presenter.getUrlData(url);                break;        }    }    @Override    public void getMessage(String message) {        Message msg = handler.obtainMessage(0, message);        handler.sendMessage(msg);    }    @Override    public void error() {        Message msg = handler.obtainMessage(1, "error");        handler.sendMessage(msg);    }    private static class MyHandler extends Handler {        private WeakReference<SimpleMvpActivity> reference;        private MyHandler(SimpleMvpActivity activity) {            reference = new WeakReference<>(activity);        }        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            SimpleMvpActivity activity = reference.get();            switch (msg.what) {                case 0:                    activity.simple_tv.setText(msg.obj.toString());                    break;                case 1:                    activity.simple_tv.setText(msg.obj.toString());                    break;            }        }    }}

具体代码见Github:

https://github.com/wukong1688

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/10794023.html




来源:http://www.icode9.com/content-4-177151.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android中Message机制的灵活应用
Android消息处理探秘 .
Android中的Handler的机制与用法详解
Android Handler机制
[Android] android的消息队列机制
Android 消息机制(Looper Handler MessageQueue Message)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服