前言:Rxjava 真的很好用,谁用谁知道,用了你就再也不想捡起Handler 和AsyncTask了
MVP:
在MVP中Model和View之间的没有任何联系,是两个完全独立的模块,当Model模型发生数据改变时,通过Presenter通知View视图发生相应的UI改变。 根据单一职责原则,Activity主要起到用户交互作用,也就是接收用户输入,显示请求结果。因此可以通过MVP框架模式来减轻Activity的职责。
Rxjava,Rxandroid:
下方地址有是找到的Github最详细的Rxjava的介绍连接
强烈建议看完官方文档,在看抛物线的文章
https://github.com/lzyzsd/Awesome-RxJava
Bean类很简单就一个名字属性
/** * Created by admin on 2016/5/5. * @author xiaozhuge */ public class UserBean { private String name; public UserBean(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "UserBean{" + "name='" + name + '\'' + '}'; } }
/** * Created by admin on 2016/5/5. * @author xiaozhuge */ public class UserModel { public Observable<UserBean> getUserInfo() { return Observable.create(new Observable.OnSubscribe<UserBean>() { @Override public void call(Subscriber<? super UserBean> subscriber) { //做一些网络访问 数据库读取等业务逻辑的操作 SystemClock.sleep(2000); UserBean bean = new UserBean("王尼玛"); subscriber.onNext(bean); subscriber.onCompleted(); } }); } }
接着就是view的接口类,这里就定义了四个方法,你可以根据需求自己增加
/** * Created by admin on 2016/5/5. * @author xiaozhuge */ public interface UserView { void updateView(UserBean user); void showProgressDialog(); void hideProgressDialog(); void showError(String msg); }
最后就是Presenter类用来作为Module和view的通讯桥梁 他需要持有他们的引用
/** * Created by admin on 2016/5/5. * Presenter作为Model和View通讯的桥梁,需要持有它们的引用。 */ public class UserPresenter { private UserModel mModel; private UserView mView; public UserPresenter(UserView view) { mView = view; mModel = new UserModel(); } public void getUser() { mView.showProgressDialog(); mModel.getUserInfo() .subscribeOn(Schedulers.io())//联网请求在io线程中执行 .observeOn(AndroidSchedulers.mainThread())//更新数据在安卓主线程中,就俩行代码就可以随意切换线程 .subscribe(new Observer<UserBean>() {//订阅 可以传Subscriber 或者Action1的对象,根据需求自己定制 @Override public void onCompleted() { //数据接受完后隐藏Dialog mView.hideProgressDialog(); } @Override public void onError(Throwable e) { 出现错误的时候弹出错误信息 隐藏dialog mView.showError(e.getMessage()); mView.hideProgressDialog(); } @Override public void onNext(UserBean userBean) {//更新UI mView.updateView(userBean); } }); } }
最后是UI的显示
public class MainActivity extends AppCompatActivity implements UserView { private UserPresenter presenter; private TextView textView; private TextView btn; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); presenter = new UserPresenter(this); textView = (TextView) findViewById(R.id.tv); btn = (TextView) findViewById(R.id.tv_show_btn); progressDialog = new ProgressDialog(this); progressDialog.setMessage("正在加载中"); if (btn != null) { btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { presenter.getUser(); } }); } } @Override public void updateView(UserBean user) { if (null == user) return; textView.setText(user.getName()); } @Override public void showProgressDialog() { progressDialog.show(); } @Override public void hideProgressDialog() { progressDialog.hide(); } @Override public void showError(String msg) { Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); } @Override protected void onDestroy() { super.onDestroy(); progressDialog.dismiss(); } }
是不是感觉so easy
附件:http://download.csdn.net/detail/zhudewei007/9510939