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
- android 初识mvp
- 初识Android MVP模式
- Android 初识 MVC、MVP框架
- 初识Android MVP(笔记)
- Android 初识mvp设计模式
- Android 初识 MVC、MVP框架
- Android开发之初识MVP模式
- 初识android设计模式—MVP
- Android MVP模式之(一)初识
- MVP初识
- 初识MVP
- 初识MVP
- 初识MVP
- 初识mvp
- MVP模式初识
- 初识MVP架构
- 初识MVP模式
- 摘要MVP概念初识
- IPv6静态路由配置
- IPv6 RIPng配置
- js兼容火狐获取图片宽和高的方法
- 使用JS对form的内容验证失败后阻止…
- myeclipse中如何设置字体
- android 初识mvp
- java try、catch、finally及finally执行顺序详解
- LisView、GridView、RecyclerView的高度wrap_content
- 【怎样使用 GitHub?】Fadeoc Khaos的回答
- js简单的设置快捷键,hotkeys捕获键盘键和组合键的输入
- eclipse注释里插入当前系统时间
- Notification中PendingInten…
- Notepad++如何设置行高
- android genymotion模拟器怎么使用以及和google提供的模拟器性能对比