android 初识mvp

来源:互联网 发布:上海知名欧美外企 知乎 编辑:程序博客网 时间:2024/05/17 03:50

本次主要看一个mvp的简单demo,不熟悉mvc,mvp的请自行百度

目录结构如下

个人理解MVP模式是隔离了各层之间的交互
bean<->model<->presenter<->view
使得每一层的逻辑独立,功能明确,方便后期维护,接下来就看代码了
1.bean
public class UserBean {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public UserBean() {}}
2.model
2.1 ILoginModel(接口)
public interface ILoginModel {void login(String username, String password, OnLoginListener loginListener);}
2.2 LoginModelImpl(实现类,业务类,此处模拟网络登录)
public class LoginModelImpl implements ILoginModel {@Overridepublic void login(final String username, final String password,final OnLoginListener loginListener) {new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}if("123".equals(username) && "456".equals(password)){loginListener.loginSuccess();} else {loginListener.loginFailed();}}}).start();;}
2.3 OnLoginListener(监听)
public interface OnLoginListener {void loginSuccess();void loginFailed();}
3 控制者 presenter,网络请求返回的结果通过handler交给UI线程处理,当然此处也可以用asynctask  eventbus等方式
public class LoginPresenter implements OnLoginListener {private static LoginActivity mMainActivity;private ILoginModel mLoginModel;/*//private OnLoginListener mLoginListener;*/private static Handler mHandler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) {case 1:// login successmMainActivity.loginSuccess();break;case 2:// login failedmMainActivity.loginFailed();break;default:break;}};};public LoginPresenter(LoginActivity mainActivity) {mMainActivity = mainActivity;mLoginModel = new LoginModelImpl();}public String getUsername() {return mMainActivity.getUsername();}public String getPassword() {return mMainActivity.getPassword();}public void login(String username, String password) {mMainActivity.showProgress();mLoginModel.login(username, password, this);}public void clear() {mMainActivity.clear();}@Overridepublic void loginSuccess() {Message msg = Message.obtain();msg.what = 1;mHandler.sendMessage(msg);}@Overridepublic void loginFailed() {Message msg = Message.obtain();msg.what = 2;mHandler.sendMessage(msg);}
4 view层
4.1 view接口(ILoginView)
public interface ILoginView {String getUsername();String getPassword();void showProgress();void hideProgress();void loginSuccess();void loginFailed();void clear();}
4.2 view实现 (UI显示,fragment或者activity)
public class LoginActivity extends Activity implements ILoginView, OnClickListener{private EditText mUsername;private EditText mPassword;private ProgressBar mPb;private Button mLogin;private Button mClear;private LoginPresenter mLoginPresenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mLoginPresenter = new LoginPresenter(this);initView();}private void initView() {mUsername = (EditText) findViewById(R.id.et_username);mPassword = (EditText) findViewById(R.id.et_password);mPb = (ProgressBar) findViewById(R.id.pb);mLogin = (Button) findViewById(R.id.login);mLogin.setOnClickListener(this);mClear = (Button) findViewById(R.id.clear);mClear.setOnClickListener(this);mPb.setVisibility(View.GONE);}@Overridepublic String getUsername() {return mUsername.getText().toString();}@Overridepublic String getPassword() {return mPassword.getText().toString();}@Overridepublic void showProgress() {mPb.setVisibility(View.VISIBLE);}@Overridepublic void hideProgress() {mPb.setVisibility(View.GONE);}@Overridepublic void loginSuccess() {Toast.makeText(this, "success", 0).show();hideProgress();}@Overridepublic void loginFailed() {Toast.makeText(this, "filed", 0).show();hideProgress();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.login:mLoginPresenter.login(mLoginPresenter.getUsername(), mLoginPresenter.getPassword());break;case R.id.clear:mLoginPresenter.clear();break;default:break;}}@Overridepublic void clear() {mUsername.setText("");mPassword.setText("");}

当业务非常简单的时候并不适合用mvp,可是当业务比较复杂的时候,这个时候就可以看到,各个层分离明显,功能划分明确,比如UI的错误肯定在view层去处理就OK了,不会影响到model。本人对mvp的好处体会也不深,项目中并没有用到,只是自行研究了下demo,如果想理解更深刻还是要用起来。








0 0
原创粉丝点击