一个简单的MVP小例子

讲到MVP,之前已经简单的阐述过我自己对其的理解,现在我写了一个简单的例子,希望可以帮助理解。
我对MVP的理解和认识
例子中用到的 AnnotateUtil.initBindView(this); 以下文章中已经提到:
AnnotateUtil.java 该类的实现代码

这就是MVP小例子的结构切图,其中两个Base类没用到

UserInfoBean.java

public class UserInfoBean implements Serializable {
    private String userName;
    private String password;

    public UserInfoBean() {
    }

    public UserInfoBean(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }

    public String getUserName() {
        return userName;
    }

    public String getPassword() {
        return password;
    }
}


Model:

public interface IUserInfoModel {

    public UserInfoBean loadLoginData();

    public void saveLoginData(String userName, String password) throws Exception;
}



public class UserInfoModel implements IUserInfoModel {
    public static Context context;
    SharedPreferences share = null;

    @Override
    public UserInfoBean loadLoginData() {
        share = context.getSharedPreferences("User", Context.MODE_PRIVATE);
        String jsonResult = share.getString("UserInfo", "");
        if (!TextUtils.isEmpty(jsonResult)) {
            UserInfoBean userInfo = new Gson().fromJson(jsonResult, UserInfoBean.class);
            return userInfo;
        }
        return null;
    }

    @Override
    public void saveLoginData(String userName, String password) throws Exception {
        UserInfoBean userInfoBean = new UserInfoBean(userName, password);
        String jsonResult = new Gson().toJson(userInfoBean);
        share = context.getSharedPreferences("User", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = share.edit();
        editor.putString("UserInfo", jsonResult);
        editor.putBoolean("isRegister", true);
        editor.commit();
    }
}


Presenter:

public class UserInfoPresenter {

    private IUserInfoModel iUserInfoModel;
    private ILoginActivity mLoginView;
    private IRegisterActivity mRegisterView;

    public UserInfoPresenter() {
    }

    public UserInfoPresenter(ILoginActivity mLoginView) {
        this.mLoginView = mLoginView;
        iUserInfoModel = new UserInfoModel();
    }

    public UserInfoPresenter(IRegisterActivity mRegisterView) {
        this.mRegisterView = mRegisterView;
        iUserInfoModel = new UserInfoModel();
    }


    //处理登录逻辑
    public void login(String userName, String password) {

        if (userName.isEmpty() || password.isEmpty()) {
            mLoginView.loginFail("账号和密码不能为空!");
        } else {
            UserInfoBean userInfo = iUserInfoModel.loadLoginData();
            if (userInfo == null) {
                mLoginView.LoginError("用户不存在,请注册!");
                return;
            }
            if (userName.equals(userInfo.getUserName())) {
                if (password.equals(userInfo.getPassword())) {
                    mLoginView.loginSuccess();
                } else {
                    mLoginView.loginFail("密码错误!");
                }
            } else {
                mLoginView.loginFail("用户名错误!");
            }
        }
    }

    //处理注册逻辑
    public void register(String userName, String password) {
        if (userName.isEmpty() || password.isEmpty()) {
            mRegisterView.registerFail("账号和密码不能为空!");
        } else {
            mRegisterView.registerSuccess();
            try {
                iUserInfoModel.saveLoginData(userName, password);
            } catch (Exception e) {
                mRegisterView.registerError("数据保存失败!");
            }
        }
    }
}


View:
public interface ILoginActivity {
    public void loginSuccess();

    public void loginFail(String message);

    public void LoginError(String message);
}



public class LoginActivity extends BaseActivity implements ILoginActivity {

    private UserInfoPresenter userPresenter;
    private SharedPreferences share;

    @BindView(id = R.id.edit_UserName)
    private EditText editUserName;
    @BindView(id = R.id.edit_UserPassword)
    private EditText editUserPassword;
    @BindView(id = R.id.text_register)
    private TextView textToRegister;
    @BindView(id = R.id.linear_text_register)
    private LinearLayout linearRegister;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_person);
        UserInfoModel.context = this;
        AnnotateUtil.initBindView(this);
        if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            getWindow().setNavigationBarColor(Color.TRANSPARENT);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        share = getSharedPreferences("User", Context.MODE_PRIVATE);
        boolean is = share.getBoolean("isRegister", false);
        if (is) {
            linearRegister.setVisibility(View.GONE);
        } else {
            linearRegister.setVisibility(View.VISIBLE);
        }
        userPresenter = new UserInfoPresenter(this);
    }

    //登录
    public void onLogin(View view) {
        String userName = editUserName.getText().toString().trim();
        String password = editUserPassword.getText().toString().trim();
        userPresenter.login(userName, password);
    }

    //注册
    public void onToRegister(View view) {
        Intent intent = new Intent(this, RegisterActivity.class);
        startActivity(intent);
    }

    @Override
    public void loginSuccess() {
        showToast("登录成功!");
        Intent intent = new Intent(this, MainPrivateActivity.class);
        startActivity(intent);
        this.finish();
    }

    @Override
    public void loginFail(String message) {
        showToast(message);
    }

    @Override
    public void LoginError(String message) {
        showToast(message);
    }
}


public interface IRegisterActivity {

    public void registerSuccess();

    public void registerFail(String message);

    public void registerError(String message);
}



public class RegisterActivity extends BaseActivity implements IRegisterActivity {

    private UserInfoPresenter userPresenter;

    @BindView(id = R.id.edit_UserName_register)
    private EditText editUserName;
    @BindView(id = R.id.edit_UserPassword_register)
    private EditText editUserPassword;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        UserInfoModel.context = this;
        AnnotateUtil.initBindView(this);
        if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            getWindow().setNavigationBarColor(Color.TRANSPARENT);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        TextView title = (TextView) findViewById(R.id.text_title_private_bar);
        title.setVisibility(View.VISIBLE);
        title.setText("注 册");
        userPresenter = new UserInfoPresenter(this);
    }

    //注册
    public void onRegister(View view) {
        String userName = editUserName.getText().toString().trim();
        String password = editUserPassword.getText().toString().trim();
        userPresenter.register(userName, password);
    }

    @Override
    public void registerSuccess() {
        showToast("注册成功!");
        this.finish();
    }

    @Override
    public void registerFail(String message) {
        showToast(message);
    }

    @Override
    public void registerError(String message) {
        showToast(message);
    }
}

希望帮助理解!

猜你喜欢

转载自blog.csdn.net/qq_35920289/article/details/76688035