IBaseView
public interface IBaseView {
void onDataSuccess();
void onDataFailer();
void show();
void hide();
}
BaseBiz
public class BaseBiz {
}
BasePresenter
public abstract class BasePresenter {
private IBaseView iBaseView;
private Context context;
public BasePresenter(IBaseView iBaseView) {
this.iBaseView = iBaseView;
}
public BasePresenter(Context context) {
this.context = context;
}
public void attached(IBaseView iBaseView){
this.iBaseView = iBaseView;
}
//释放资源,防止资源泄露
public void onDetached(){
this.iBaseView = null;
this.context = null;
}
public IBaseView getView() {
return iBaseView;
}
public Context getContext() {
return context;
}
}
BaseActivity
public abstract class BaseActivity extends AppCompatActivity {
private BasePresenter basePresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int layoutId = initLayoutId();
if (layoutId != 0){
setContentView(layoutId);
initView();
initData();
initListener();
}else {
finish();
}
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
basePresenter = initPresenter();
basePresenter.attached(initIView());
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
basePresenter.onDetached();
basePresenter = null;
}
//初始化控件
public abstract void initView();
//初始化数据
public abstract void initData();
//初始化布局文件
public abstract int initLayoutId();
//初始化各种监听
public abstract void initListener();
//初始化presenter
public abstract BasePresenter initPresenter();
//初始化view接口
public abstract IBaseView initIView();
}
LoginView
public interface LoginView extends IBaseView {
//参照异常方法
void onParamIllegal();
}
LoginBiz
public class LoginBiz extends BaseBiz {
//新建一个类
public void login(final String name, final String password, final LoginCallBack callBack) {
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... strings) {
SystemClock.sleep(2500);
if (name.contains("111") && password.contains("111")){
return "成功";
}else {
return "失败";
}
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (s.contains("成功")){
callBack.onLoginSuccess("登录成功");
}else {
callBack.onLoginFailer("登录失败");
}
}
}.execute();
}
}
LoginPresenter
public class LoginPresenter extends BasePresenter {
private LoginBiz loginBiz;
public LoginPresenter(Context context) {
super(context);
loginBiz = new LoginBiz();
}
public void Login(String name,String password){
final LoginView view = (LoginView) getView();
if (TextUtils.isEmpty(name)||TextUtils.isEmpty(password)){
view.onParamIllegal();
return;
}
view.show();
loginBiz.login(name, password, new LoginCallBack() {
@Override
public void onLoginSuccess(String result) {
view.onDataSuccess();
view.hide();
}
@Override
public void onLoginFailer(String msg) {
view.onDataFailer();
view.hide();
}
});
}
}
LoginCallBack
public interface LoginCallBack {
void onLoginSuccess(String result);
void onLoginFailer(String msg);
}
MainActivity继承BaseActivity实现LoginView
public class MainActivity extends BaseActivity implements LoginView {
private EditText name;
private EditText password;
private Button login;
private ProgressBar progressBar;
private LoginPresenter loginPresenter;
@Override
public void initView() {
name = (EditText) findViewById(R.id.name);
password = (EditText) findViewById(R.id.passowrd);
login = (Button) findViewById(R.id.login);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
}
@Override
public void initData() {
}
@Override
public int initLayoutId() {
return R.layout.activity_main;
}
@Override
public void initListener() {
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String userName = name.getText().toString();
String pwd = password.getText().toString();
loginPresenter.Login(userName, pwd);
}
});
}
@Override
public BasePresenter initPresenter() {
loginPresenter = new LoginPresenter(this);
return loginPresenter;
}
@Override
public IBaseView initIView() {
return this;
}
@Override
public void onParamIllegal() {
Toast.makeText(this, "用户名或密码不能为空", Toast.LENGTH_SHORT).show();
}
@Override
public void onDataSuccess() {
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onDataFailer() {
Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();
}
@Override
public void show() {
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void hide() {
progressBar.setVisibility(View.GONE);
}
}