Android最简单的MVP架构写法

1、bean文件夹属于封装的对象

2、model---我把他的定义就是专门写网路请求的

3、presenter----我把他当做是沟通的桥梁,实现数据层与视图层的交互

4、view---最简单的视图层包括(activity、adapter、fragment等。。。)

解释一下我不喜欢讲话,所以一般都是代码或者截图了。

1、我那登录作为例子

2、我网路框架用的是volley,为什么用volley呢?答案:因为这个我最熟的网络框架就是这个哈哈哈

3、我喜欢说话总是讲究1,2,3.。因为我觉得清晰明了

下面正题

先说一下model

上代码

public class LoginModel {
    /**
     * 登录请求
     *
     * @param pwd
     * @param listener
     * @param errorListener
     */
    public void mbMem_login(final String phone, final String pwd, Response.Listener listener, Response.ErrorListener errorListener, final Context context) {
        MyStringRequest jsonObjectRequest = new MyStringRequest(Request.Method.POST, HttpUrl.mbMem_login, listener, errorListener) {
            @Override
            protected Map getParams() throws AuthFailureError {
                // 请求参数
                Map map = new HashMap();
                map.put("memaccount", phone);
                map.put("mempass", MD5Util.toMD5(pwd));
                map.put("client", "Android");
                map.put("logintype", "mobphone");
                return map;
            }

            @Override
            protected Response parseNetworkResponse(
                    NetworkResponse response) {
                Response superResponse = super
                        .parseNetworkResponse(response);
                Map responseHeaders = response.headers;
                String rawCookies = responseHeaders.get("Set-Cookie");
                //Constant是一个自建的类,存储常用的全局变量
                UserBean userBean = new UserBean();
                userBean.setMemid("");
                userBean.setEmail("");
                userBean.setBirthday("");
                userBean.setGender("");
                userBean.setLogofilepathname("");
                userBean.setMobphone("");
                userBean.setNickname("");
                userBean.setCookieId(rawCookies.substring(0, rawCookies.indexOf(";")));
                UserInfoUtil.getInstance().setUser(userBean, context);
                return superResponse;
            }
        };
        jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(50000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        jsonObjectRequest.setTag("mbMem_login");
        MutualApplication.getRequestQueue().add(jsonObjectRequest);
    }
}

纯纯的就是代码截图,不好意思

解释:这个最简单就是简单的网路请求,返回数据在presenter层接收

Android最简单的MVP架构写法_第1张图片

看见没在presenter层实例化的这里传过来,不好意思说的有点多

说一下view层

@Override
protected void initView() {
    ButterKnife.inject(this);
    loginPresenter = new LoginPresenter();
    if (loginPresenter != null)
        loginPresenter.attachView(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (loginPresenter != null) {
        loginPresenter.detachView();
    }
}

解释实例化在activity或者fragment中

实例化presenter

既然说到实例化presenter

上presenter代码吧

public class LoginPresenter extends BasePresenter {
    @Override
    public LoginModel loadModel() {
        return new LoginModel();
    }

    /**
     * 登录
     *
     * @param context
     * @param phone
     * @param pwd
     */
    public void mbMem_login(final Context context, final String phone, final String pwd) {
        getiModel().mbMem_login(phone, pwd, new Response.Listener() {
            @Override
            public void onResponse(String s) {
                try {
                    final JSONObject jsonObject = new JSONObject(s.toString());
                    if (Status.status(jsonObject)) {
                        //登录成功
                        getIView().loginSuccess(jsonObject.getJSONObject("bMem"), jsonObject);
                    } else {
                        //请求失败
                        Status.fail(context, jsonObject);
                        UserInfoUtil.getInstance().setUser(null, context);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                //网路失败
                HintUtil.network_error(context);
            }
        }, context);
    }
}
解释:

view调用Presenter 的登录方法Presenter 总的login方法去调用model的网络请求请求结果返回到Presenter 层通过返回数据控制view层的UI变化。那presenter层还需要继承一个抽象类来实现必须实现的方法。

上代码

public abstract class BasePresenter<M, V> {
    private WeakReference actReference;
    protected M iModel;

    public M getiModel() {
        iModel = loadModel(); //使用前先进行初始化
        return iModel;
    }

    public void attachView(Object view) {
        actReference = new WeakReference(view);
    }

    public void detachView() {
        if (actReference != null) {
            actReference.clear();
            actReference = null;
        }
    }

    public V getIView() {
        return (V) actReference.get();
    }

    public abstract M loadModel();
}
使用了弱引用来获取view的属性方法
   






你可能感兴趣的:(Android,简单,MVP,简单,Android)