MVP架构引导自己的封装思想

1.先嘲笑自己一波,每一个activity都写一个网络请求,都重复的写一遍.当adapter里面需要调用activity的方法时,居然把context改成了activity的名称,然后adapter就不适用其他的activity了.一直想把请求封装出去.然后就没有然后了.
2.MVP的架构虽然还不是理解的很透彻,但是,有了自己的一个理解形式.最难得的是,通过mvp的学习,知道了用接口的形式来实现异步的回调以及基本的封装.
3.MCP最最最难能可贵的是,如果你觉得现在的代码很臃肿,MVC的架构让你看起来快疯掉了,那么,你可以进行局部的MVP改写封装,这简直是没谁了.这是我觉得最最最好的一点.完全可以不影响你现在的代码结构,你只需要把某一小块儿的内容,用MVP封装出去即可.
4.物竞天择适者生存.这句话永远没错的.钉㭌镶嵌,万物不离其中.
所有的都东西,最基本的概念就是MVC,MVC是基本项,MVP是加分项.你把MVP拆封了,会发现原来,还是MVC架构.
5.简单的用代码解释一下自己的感悟.

(1).MVP的套路
activity–>实现view接口;
activity–>实现接口对应的页面响应事件;
将view对象传递给present;
presentimpl–>present接口;
view对象实现activity内的方法;
presentimpl–>interactor接口;
presentimpl–>实现接口对应的方法,和回调方法;
interactorimpl–>实现interactor接口,并执行回调;
(二)8个步骤:我分别给出8个代码片;

public interface Mvp_MyInformationActivityView {

    void goToRelease();

    void goToReleaseFail();

}
public class Mvp_MyInformationActivity extends Activity implements View.OnClickListener, Mvp_MyInformationActivityView {

    private PullLoadMoreRecyclerView pullLoadMoreRecyclerView;
    private RelativeLayout rl_back;
    private RelativeLayout rlRelease;

    private Mvp_MyInformationPresent present;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mvp__my_information);

        //初始化id
        setViews();

        //点击事件
        setOnDoclick();


    }

    //初始化id
    private void setViews() {
        pullLoadMoreRecyclerView = (PullLoadMoreRecyclerView) findViewById(R.id.pullLoadMoreRecyclerView);
        rl_back = (RelativeLayout) findViewById(R.id.rl_back);
        rlRelease = (RelativeLayout) findViewById(R.id.rlRelease);

        present = new Mvp_MyInformationPresentImp(this);
    }

    //点击事件
    private void setOnDoclick() {
        rl_back.setOnClickListener(this);
        rlRelease.setOnClickListener(this);
    }


    //点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.rl_back:
                finish();
                break;

            case R.id.rlRelease:
                present.hasPermessionStorage(this);
                break;
        }

    }

    //去发布
    @Override
    public void goToRelease() {
        startActivity(new Intent(Mvp_MyInformationActivity.this, ReleaseInformationActivity.class));
    }

    //没有权限发布  提示权限
    @Override
    public void goToReleaseFail() {
        HyfToast.showToast(this, "请允许获取手机照片");
    }

    @Override
    protected void onDestroy() {
        present.onDestroy();
        super.onDestroy();
    }


}
//activity里的方法
present = new Mvp_MyInformationPresentImp(this);
//接口类
public interface Mvp_MyInformationPresent {

    void hasPermessionStorage(Mvp_MyInformationActivity activity);

    void onDestroy();

}

//实现类
public class Mvp_MyInformationPresentImp implements Mvp_MyInformationPresent, Mvp_MyInformationModule.moduleHasPermissionStorage {

    private Mvp_MyInformationActivityView view;
    private Mvp_MyInformationModule module;

    public Mvp_MyInformationPresentImp(Mvp_MyInformationActivityView view) {
        this.view = view;
        module = new Mvp_MyInformationModuleImp();
    }

    @Override
    public void hasPermessionStorage(Mvp_MyInformationActivity activity) {
        module.isRelease(activity, this);
    }

    @Override
    public void onDestroy() {
        view = null;
    }

    //module的回调
    @Override
    public void moduleToSuccess() {
        if (view != null) {
            view.goToRelease();
        }
    }

    @Override
    public void moduleToFail() {
        if (view != null) {
            view.goToReleaseFail();
        }
    }
    //module的回调


}
//presentImpl里的方法
//module的回调
    @Override
    public void moduleToSuccess() {
        if (view != null) {
            view.goToRelease();
        }
    }

    @Override
    public void moduleToFail() {
        if (view != null) {
            view.goToReleaseFail();
        }
    }
    //module的回调
//presentImpl里的实现的接口
public class Mvp_MyInformationPresentImp implements Mvp_MyInformationPresent, Mvp_MyInformationModule.moduleHasPermissionStorage 
//present实现的回调方法,也是view的执行方法
//module的回调
    @Override
    public void moduleToSuccess() {
        if (view != null) {
            view.goToRelease();
        }
    }

    @Override
    public void moduleToFail() {
        if (view != null) {
            view.goToReleaseFail();
        }
    }
    //module的回调
//interactor接口类
public interface Mvp_MyInformationModule {

    interface moduleHasPermissionStorage {
        void moduleToSuccess();

        void moduleToFail();
    }

    void isRelease(Mvp_MyInformationActivity activty, moduleHasPermissionStorage module);
}

//实现类
public class Mvp_MyInformationModuleImp implements Mvp_MyInformationModule {


    @Override
    public void isRelease(Mvp_MyInformationActivity activity, moduleHasPermissionStorage module) {

        boolean error = false;
        if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            error = true;
            module.moduleToFail();
            return;
        }

        if (!error) {
            module.moduleToSuccess();
        }
    }


}

这一整套的逻辑代码下来我相信已经非常的清楚了.
自己理解的mvp结构

重点来了;重点来了;重点来了;
通过结构的异步分装实现;
我在adapter里面封装了请求:

InformationFragment_ListFragment_Recycle_Interactor interactor = new InformationFragment_ListFragment_Recycle_InteractorImpl(context);
                interactor.ToHttpPost(list.get(position).get("user_id") + "", new InformationFragment_ListFragment_Recycle_Interactor.ToListener() {
                    @Override
                    public void ToSuccess(String message) {
                        HyfToast.showToast(context, message);
                    }
                });

我仅仅只用了mvp的interactor和接口就实现了这种方式

//接口类
public interface InformationFragment_ListFragment_Recycle_Interactor {

    interface ToListener{
        void ToSuccess(String message);
    }

    void ToHttpPost(String userid , ToListener listener);

}

//实现代码
public class InformationFragment_ListFragment_Recycle_InteractorImpl implements InformationFragment_ListFragment_Recycle_Interactor {

    private Context context;

    public InformationFragment_ListFragment_Recycle_InteractorImpl(Context context) {
        this.context = context;
    }

    @Override
    public void ToHttpPost(String userid, ToListener listener) {
        setFollowID(userid, listener);
    }

    /**
     * 添加关注
     */
    private void setFollowID(String str01, ToListener listener) {

        String url = StaticIP.BUSINESS_FOLLOW;//请求地址
        HashMap<String, String> map = new HashMap<>();
        map.put("id", str01);
        volley_Post_GETID(url, map, "follow", listener);

    }

    /*****************************
     * Volley请求框架
     *******************************/
    private void volley_Post_GETID(String url, final HashMap<String, String> map, final String type, final ToListener listener) {
        StringRequest request = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {

                    @Override
                    public void onResponse(final String arg0) {

                        //解析请求结果
                        if (type.equals("follow")) {
                            setHttpResultFollowID(arg0, listener);
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(final VolleyError arg0) {

                //volley错误状态码处理
                VolleyErrorClass volleyerrorclass = new VolleyErrorClass(context);
                volleyerrorclass.setLogCat(arg0);

                listener.ToSuccess("关注成功");

            }
        }) {

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {

                HashMap<String, String> map01 = new HashMap<>();
                map01.put("token", new SystemData(context).getToken(StaticData.Token_Key));

                Log.i("haha", "头信息" + map01);

                return map01;
            }

            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                HashMap<String, String> map01;
                map01 = map;
                return map01;
            }
        };
        request.setRetryPolicy(new DefaultRetryPolicy(10 * 1000, 0, 0f));
        request.setTag("abcPost");
        YouMaiApplication.getRequestQueue().add(request);


    }
    /*****************************Volley请求框架*******************************/

    /**
     * 解析请求结果  关注
     */
    protected void setHttpResultFollowID(String str, ToListener listener) {
        Log.i("haha", str);

        listener.ToSuccess("关注成功");

    }

//所以很神奇,我自己都没想到会误打误撞就解决困惑我这么久的封装问题,所以所有事情都是事出有因,只要你多去尝试新的东西,旧的问题迟早都会因为自己的思想开阔而解决的.真理.

//附上我们上线的应用,大家下载玩一下,有好处的哟!
http://info.appstore.vivo.com.cn/detail/1841175?source=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值