Rxandroid与MVP的结合(demo)
来源:互联网 发布:微信淘宝下单返利骗局 编辑:程序博客网 时间:2024/05/02 04:50
这是一个简单的demo(登陆返回),保存下来,以后时不时的看看而已
MVP分为M层 V层 P层
M->biz,登陆逻辑,登陆返回
V->一个接口,反馈给MainActivity
P->连接biz与View的纽带,请求biz获取数据,使用V更改界面
先写实体User
User.class
public class User { public String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
登陆成功失败的接口
OnGetDataListener
/** * 登陆成功失败的回调 */public interface OnGetDataListener<T> { void success(T response); // 网络操作成功 void fail(T response, String msg); // 网络操作失败}
登陆逻辑
LoginBiz
public class LoginBiz { public void doLogin(final OnGetDataListener<User> listener,final User user ){ Observable.create(new Observable.OnSubscribe<User>() { @Override public void call(Subscriber<? super User> subscriber) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } subscriber.onNext(user); } }).subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<User>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(User user) { if (user!=null) listener.success(user); else listener.fail(user,"error"); } }); }}
View层
ILoginView
/** * 登录界面,是一个接口,如:展示进度条、隐藏进度条、展示数据等 */public interface ILoginView { void showView(String userName); void showLoadding(); void hideLoadding();}
P层
LoginPresenter
/** * Created by pailiao on 2016/7/27. * 连接view与biz的纽带 * 请求logbiz获取数据,使用ILoginView层更新数据 */public class LoginPresenter { private ILoginView loginView; private LoginBiz loginBiz; public LoginPresenter(ILoginView loginView) { this.loginView = loginView; this.loginBiz = new LoginBiz(); } public void doLogin(String userName){ loginView.showLoadding(); // 展示加载条 User user = new User(); user.name = userName; loginBiz.doLogin(new OnGetDataListener<User>() { @Override public void success(User response) { loginView.hideLoadding(); // 隐藏加载条 loginView.showView(response.name); // 展示数据 } @Override public void fail(User response, String msg) { loginView.hideLoadding(); loginView.showView(msg); } },user); }}
MainActivity的xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="用户名" /> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DO" /> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:visibility="gone" /></LinearLayout>
MainActivity.class
public class MainActivity extends Activity implements ILoginView { private String TAG = MainActivity.class.getSimpleName(); private EditText editText; private TextView textView; private Button button; private ProgressBar progressBar; private LoginPresenter loginPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); loginPresenter=new LoginPresenter(this); button=(Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String userName = editText.getText().toString(); loginPresenter.doLogin(userName); } }); } private void initUI() { editText = (EditText) findViewById(R.id.editText); textView = (TextView) findViewById(R.id.textView); progressBar = (ProgressBar) findViewById(R.id.progressBar); } @Override public void showView(String userName) { textView.setText(userName); } @Override public void showLoadding() { progressBar.setVisibility(View.VISIBLE); } @Override public void hideLoadding() { progressBar.setVisibility(View.GONE); }}
记性不好,特此记录
0 0
- Rxandroid与MVP的结合(demo)
- Retrofit与RxAndroid结合使用
- MVP架构的理解与实现Demo
- Mvp+Rxandroid+Retrofit的简单实现
- MVP+rxAndroid+Material开发的一款APP
- Rxjava与Rxandroid结合实现网络请求
- rxjava/rxandroid结合lambda的使用
- HBase与WordCount的结合使用Demo
- MVP架构下Android的Rxjava与Retrofit 结合
- Retrofit+RxAndroid+MVP
- MVP+Retrofit+RxAndroid实例
- RxAndroid+MVP实战
- 基于mvp架构的retrofit+rxandroid的网络访问
- 安卓中MVP模式和RxAndroid的具体实现例子
- 安卓中MVP模式和RxAndroid的具体实现例子
- 如何在MVP模式中控制RxAndroid的生命周期?
- 安卓中MVP模式和RxAndroid的具体实现例子
- 安卓中MVP模式和RxAndroid的具体实现例子
- 版本更新XML
- CKEditor使用中遇到的问题解决
- DIV+CSS与表格建站的差别
- JVM(一)java的执行概要
- EventBus简介
- Rxandroid与MVP的结合(demo)
- 出版商后台系统书名搜索中文问题及后续带来的不能分页问题
- Struts2上传文件及相关总结
- Android开源工具项目集合
- 支付系统spark生产应用最佳实践
- Paxos协议学习---1.总纲
- java集合框架学习—HashMap的实现原理
- http://blog.csdn.net/howlaa/article/details/45367697 view.manure(0,0) 报空指针异常
- 给定整数x,定义函数A(n)=1+x+x2+x3+…+xn(n为整数且n>=0).已知乘运算的时间远大于加运算,输入x,n;如何尽可能快的求出A(n)?