1. 程式人生 > >Android使用MVP實現登入註冊

Android使用MVP實現登入註冊

一.定義一個類(以下用到的介面)

public class API {
    public static final String LOGIN_URL = "http://www.zhaoapi.cn/user/login";//登入介面
    public static final String REG_URL = "http://www.zhaoapi.cn/user/reg";//註冊介面
}

二.寫一個介面

public interface LoginCallBack {
    void onLoginSuccess(String result);

    void onLoginFailer(String msg);
}

三.view層

public interface ILoginView {
    //登入成功
    void onSuccess(String result);

    //登入失敗
    void onFailer(String error);

}

四.Model層(處理資料)

public class LoginModel {
	//這裡的User類,裡面包含的是姓名和密碼
    public void login(final User user, final LoginCallBack loginCallBack) {
        HttpUtils httpUtils = new HttpUtils();
        httpUtils.getpath(API.LOGIN_URL + "?mobile=" + user.getName() + "&&password=" + user.getPass());
        httpUtils.getHelpListener(new HttpUtils.GetData() {
            @Override
            public void setString(String s) {
                Gson gson = new Gson();
                UserBean userBean = gson.fromJson(s, UserBean.class);
                if (userBean.getCode().equals("0")) {
                    loginCallBack.onLoginSuccess("登陸成功");
                } else {
                    loginCallBack.onLoginFailer("登入失敗");
                }
            }
        });
    }
}

五.Presenter層

public class LoginPresenter {
    private ILoginView iLoginView;
    private LoginModel loginModel;

    public LoginPresenter(ILoginView iLoginView) {
        this.iLoginView = iLoginView;
        loginModel = new LoginModel();
    }

    public void login(User user) {
        loginModel.login(user, new LoginCallBack() {
            @Override
            public void onLoginSuccess(String result) {
                iLoginView.onSuccess("登陸成功");
            }

            @Override
            public void onLoginFailer(String msg) {
                iLoginView.onFailer("登入失敗");
            }
        });
    }
}

六.Activity層

public class TwoActivity extends AppCompatActivity implements ILoginView {

    private LoginPresenter loginPresenter;
    private EditText name;
    private EditText pwd;
    private Button login_bt;
    private TextView register;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        //初始化控制元件
        name = (EditText) findViewById(R.id.name);
        pwd = (EditText) findViewById(R.id.pwd);
        login_bt = (Button) findViewById(R.id.login_bt);
        loginPresenter = new LoginPresenter(this);
        register = (TextView) findViewById(R.id.register);
        //點選登入
        login_bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name1 = name.getText().toString().trim();
                String pwd1 = pwd.getText().toString().trim();
                //判空
                if (TextUtils.isEmpty(name1) && TextUtils.isEmpty(pwd1)) {
                    Toast.makeText(TwoActivity.this, "使用者名稱或密碼不能為空", Toast.LENGTH_SHORT).show();
                } else {
                    loginPresenter.login(new User(name1, pwd1));
                }
            }
        });

        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(TwoActivity.this, RegisterActivity.class));
            }
        });

    }

    @Override
    public void onSuccess(String result) {
        SharedPreferences sharedPreferences = getSharedPreferences("login", Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = sharedPreferences.edit();
        edit.putInt("login", 0);
        edit.commit();
        Intent intent = new Intent(this, ShowActivity.class);
        startActivity(intent);
        finish();

        Toast.makeText(this, "登入成功", Toast.LENGTH_SHORT).show();
        //startActivity(new Intent(TwoActivity.this, ShowActivity.class));
    }

    @Override
    public void onFailer(String error) {
        Toast.makeText(this, "登入失敗", Toast.LENGTH_SHORT).show();

    }
}

七.註冊跟登入程式碼一致