MVP周考二模拟

本文深入解析MVP(Model-View-Presenter)模式在Android应用开发中的实现细节与应用场景,包括核心组件LoginActivity、ILoginView、LoginPresenter及LoginModel的具体职责划分,展示了如何通过MVP模式实现应用程序的解耦。
LoginActivity

public class LoginActivity extends AppCompatActivity implements View.OnClickListener,ILoginView{

            private Loginpresenter mloginpresenter;

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

                findViewById(R.id.login).setOnClickListener(this);
                mloginpresenter = new Loginpresenter(this);

    }

    //登录按钮
    @Override
    public void onClick(View v) {
        //点击登录
        mloginpresenter.login("account","password");
    }

    //联网成功
    @Override
    public void onLoginSuccess(final LoginBean loginBean) {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(LoginActivity.this, "登录成功"+loginBean.getData().getMobile(), Toast.LENGTH_SHORT).show();
            }
        });

    }

    //联网失败
    @Override
    public void onLoginFaild(final String error) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(LoginActivity.this, "登录失败了"+error, Toast.LENGTH_SHORT).show();
            }
        });

    }


}








ILoginView

public interface ILoginView {

    //定义一个成功的方法
    void onLoginSuccess(LoginBean loginBean);

    //定义一个失败的方法
    void onLoginFaild(String error);

}







Loginpresenter

public class Loginpresenter {

    private final LoginModel mloginModel;
    private final ILoginView miLoginView;

    //生成构造函数
    public Loginpresenter(ILoginView loginView) {

        miLoginView = loginView;
        //创建LoginModel  类
        mloginModel = new LoginModel();
    }

    //定义一个登录的方法
    public void login(String account, String password){

        //调用 LoginModel  里 login  方法
        mloginModel.login(account, password, new LoginModel.IloginModelCallback() {

            @Override
            public void onLoginSuccess(LoginBean loginBean) {
                if (miLoginView!=null){
                    miLoginView.onLoginSuccess(loginBean);
                }
            }

            @Override
            public void onLoginFaild(String error) {
                if (miLoginView!=null){
                    miLoginView.onLoginFaild(error);

                }
            }
        });

    }

}






LoginModel

public class LoginModel {

    //定义一个登录的方法
    public void login(String account,String password,final IloginModelCallback iLoginModelCallback){

        //创建一个okhttpclient
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .build();

        //通过表单的形式.构建一个requestBody,通过添加 key-value  上传参数
                 RequestBody requestBody = new FormBody.Builder()
                .add("source","android")
                .add("mobile",account)
                .add("password",password)
                .build();

        //通过我们构造的requestBody,去构造一个Request
        final Request request = new Request.Builder()
                .url("https://www.zhaoapi.cn/user/login")
                .post(requestBody)
                .build();


        //使用okhttpClient对象执行new Call, 传入一个Request ,去构造一个call
        Call call = okHttpClient.newCall(request);


        //使用异步
        call.enqueue(new Callback(){
            @Override
            public void onFailure(Call call, IOException e) {
                //失败
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //联网成功
                String json = response.body().string();
                //   创建gson   并调用bean
                LoginBean loginBean = new Gson().fromJson(json, LoginBean.class);

                //得到里面的数据
                String code = loginBean.getCode();
                String msg = loginBean.getMsg();

                if ("0".equalsIgnoreCase(code)){
                    //登录成功
                    if (iLoginModelCallback!=null){
                        iLoginModelCallback.onLoginSuccess(loginBean);
                    }


                }else {
                    if (iLoginModelCallback!=null){
                        iLoginModelCallback.onLoginFaild(msg);
                    }
                }

            }
        });
    }


    public interface IloginModelCallback{

        void onLoginSuccess(LoginBean loginBean);

        void onLoginFaild(String error);
    }

}






public class LoginBean {

    private String msg;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {


        private Object age;
        private String appkey;
        private String appsecret;
        private String createtime;
        private Object email;
        private Object fans;
        private Object follow;
        private Object gender;
        private Object icon;
        private Object latitude;
        private Object longitude;
        private String mobile;
        private Object money;
        private Object nickname;
        private String password;
        private Object praiseNum;
        private String token;
        private int uid;
        private Object userId;
        private String username;

        public Object getAge() {
            return age;
        }

        public void setAge(Object age) {
            this.age = age;
        }

        public String getAppkey() {
            return appkey;
        }

        public void setAppkey(String appkey) {
            this.appkey = appkey;
        }

        public String getAppsecret() {
            return appsecret;
        }

        public void setAppsecret(String appsecret) {
            this.appsecret = appsecret;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public Object getEmail() {
            return email;
        }

        public void setEmail(Object email) {
            this.email = email;
        }

        public Object getFans() {
            return fans;
        }

        public void setFans(Object fans) {
            this.fans = fans;
        }

        public Object getFollow() {
            return follow;
        }

        public void setFollow(Object follow) {
            this.follow = follow;
        }

        public Object getGender() {
            return gender;
        }

        public void setGender(Object gender) {
            this.gender = gender;
        }

        public Object getIcon() {
            return icon;
        }

        public void setIcon(Object icon) {
            this.icon = icon;
        }

        public Object getLatitude() {
            return latitude;
        }

        public void setLatitude(Object latitude) {
            this.latitude = latitude;
        }

        public Object getLongitude() {
            return longitude;
        }

        public void setLongitude(Object longitude) {
            this.longitude = longitude;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public Object getMoney() {
            return money;
        }

        public void setMoney(Object money) {
            this.money = money;
        }

        public Object getNickname() {
            return nickname;
        }

        public void setNickname(Object nickname) {
            this.nickname = nickname;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public Object getPraiseNum() {
            return praiseNum;
        }

        public void setPraiseNum(Object praiseNum) {
            this.praiseNum = praiseNum;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public int getUid() {
            return uid;
        }

        public void setUid(int uid) {
            this.uid = uid;
        }

        public Object getUserId() {
            return userId;
        }

        public void setUserId(Object userId) {
            this.userId = userId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
    }
}



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.day08_mvp04.view.activity.LoginActivity">

    <Button
        android:layout_centerInParent="true"
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="login"
         />

</RelativeLayout>



//解耦

protected abstract void initModel();
void Destroy(){
    view=null;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值