// Path: app/src/main/java/com/example/app/rxjava/bean/User.java
// public class User {
//     private String name;
//     private String password;
//     private String email;
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/module/user/model/UserModel.java
// public class UserModel implements UserIA {
//     public Observable<User> getUser() {
//         return Observable.create(new Observable.OnSubscribe<User>() {
//             @Override
//             public void call(Subscriber<? super User> subscriber) {
//                 // 设置个2000ms的延迟，模拟网络访问、数据库操作等等延时操作
//                 SystemClock.sleep(2000);
// 
// //                final User user = null;
//                 final User user = new User();
//                 user.setName("Smith");
//                 if (user == null) {
//                     subscriber.onError(new Exception("User = null"));
//                 } else {
//                     subscriber.onNext(user);
//                     subscriber.onCompleted();
//                 }
//             }
//         });
//     }
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/module/user/model/ia/UserIA.java
// public interface UserIA {
//     public Observable<User> getUser();
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/module/user/view/ia/UserViewIA.java
// public interface UserViewIA extends BaseViewIA {
//     void updateView(User user);
// }


import com.example.app.rxjava.bean.User;
import com.example.app.rxjava.module.user.model.UserModel;
import com.example.app.rxjava.module.user.model.ia.UserIA;
import com.example.app.rxjava.module.user.view.ia.UserViewIA;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.schedulers.Schedulers;
package com.example.app.rxjava.module.user.presenter;



/**
 * Created by Administrator on 2016/2/29.
 */
public class UserPresenter {
    private UserViewIA mUserViewIA;
    private UserIA mUserIA;

    public UserPresenter(UserViewIA mUserViewIA) {
        this.mUserViewIA = mUserViewIA;
        this.mUserIA = new UserModel();
    }

    public void getUser() {
        // 这里如果使用 Lambda 会更简洁
        mUserIA.getUser()
            .subscribeOn(Schedulers.io())// 在非UI线程中执行getUser
            .doOnSubscribe(new Action0() {
                @Override
                public void call() {
                    mUserViewIA.showProgressDialog();
                }
            })
            .subscribeOn(AndroidSchedulers.mainThread()) // 指定主线程
            .observeOn(AndroidSchedulers.mainThread())// 在UI线程中执行结果
            .subscribe(new Subscriber<User>() {
                @Override
// Path: app/src/main/java/com/example/app/rxjava/bean/User.java
// public class User {
//     private String name;
//     private String password;
//     private String email;
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/module/user/model/UserModel.java
// public class UserModel implements UserIA {
//     public Observable<User> getUser() {
//         return Observable.create(new Observable.OnSubscribe<User>() {
//             @Override
//             public void call(Subscriber<? super User> subscriber) {
//                 // 设置个2000ms的延迟，模拟网络访问、数据库操作等等延时操作
//                 SystemClock.sleep(2000);
// 
// //                final User user = null;
//                 final User user = new User();
//                 user.setName("Smith");
//                 if (user == null) {
//                     subscriber.onError(new Exception("User = null"));
//                 } else {
//                     subscriber.onNext(user);
//                     subscriber.onCompleted();
//                 }
//             }
//         });
//     }
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/module/user/model/ia/UserIA.java
// public interface UserIA {
//     public Observable<User> getUser();
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/module/user/view/ia/UserViewIA.java
// public interface UserViewIA extends BaseViewIA {
//     void updateView(User user);
// }


// Path: app/src/main/java/com/example/app/rxjava/module/user/presenter/UserPresenter.java
import com.example.app.rxjava.bean.User;
import com.example.app.rxjava.module.user.model.UserModel;
import com.example.app.rxjava.module.user.model.ia.UserIA;
import com.example.app.rxjava.module.user.view.ia.UserViewIA;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.schedulers.Schedulers;

package com.example.app.rxjava.module.user.presenter;



/**
 * Created by Administrator on 2016/2/29.
 */
public class UserPresenter {
    private UserViewIA mUserViewIA;
    private UserIA mUserIA;

    public UserPresenter(UserViewIA mUserViewIA) {
        this.mUserViewIA = mUserViewIA;
        this.mUserIA = new UserModel();
    }

    public void getUser() {
        // 这里如果使用 Lambda 会更简洁
        mUserIA.getUser()
            .subscribeOn(Schedulers.io())// 在非UI线程中执行getUser
            .doOnSubscribe(new Action0() {
                @Override
                public void call() {
                    mUserViewIA.showProgressDialog();
                }
            })
            .subscribeOn(AndroidSchedulers.mainThread()) // 指定主线程
            .observeOn(AndroidSchedulers.mainThread())// 在UI线程中执行结果
            .subscribe(new Subscriber<User>() {
                @Override
                public void onNext(User user) {