UserPresenter.java 4.1 KB
Newer Older
J
jessyan 已提交
1 2
package me.jessyan.mvparms.demo.mvp.presenter;

J
jessyan 已提交
3 4 5
import android.app.Application;

import com.jess.arms.base.AppManager;
J
jessyan 已提交
6 7 8 9
import com.jess.arms.base.BaseActivity;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.mvp.BasePresenter;
J
jessyan 已提交
10 11
import com.jess.arms.utils.PermissionUtil;
import com.tbruyelle.rxpermissions.RxPermissions;
J
jessyan 已提交
12 13 14 15 16 17 18 19 20 21 22

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import me.jessyan.mvparms.demo.mvp.contract.UserContract;
import me.jessyan.mvparms.demo.mvp.model.entity.User;
import me.jessyan.mvparms.demo.mvp.ui.adapter.UserAdapter;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
J
jessyan 已提交
23
import me.jessyan.rxerrorhandler.handler.RetryWithDelay;
J
jessyan 已提交
24 25 26 27 28 29 30 31 32 33 34
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.schedulers.Schedulers;

/**
 * Created by jess on 9/4/16 10:59
 * Contact with jess.yan.effort@gmail.com
 */
@ActivityScope
public class UserPresenter extends BasePresenter<UserContract.Model, UserContract.View> {
    private RxErrorHandler mErrorHandler;
J
jessyan 已提交
35
    private RxPermissions mRxPermissions;
J
jessyan 已提交
36 37
    private AppManager mAppManager;
    private Application mApplication;
J
jessyan 已提交
38 39 40 41 42 43
    private List<User> mUsers = new ArrayList<>();
    private DefaultAdapter mAdapter;
    private int lastUserId = 1;


    @Inject
J
jessyan 已提交
44
    public UserPresenter(UserContract.Model model, UserContract.View rootView, RxErrorHandler handler
J
jessyan 已提交
45
            , RxPermissions rxPermissions, AppManager appManager, Application application) {
J
jessyan 已提交
46
        super(model, rootView);
J
jessyan 已提交
47
        this.mApplication = application;
J
jessyan 已提交
48
        this.mErrorHandler = handler;
J
jessyan 已提交
49
        this.mRxPermissions = rxPermissions;
J
jessyan 已提交
50
        this.mAppManager = appManager;
J
jessyan 已提交
51 52 53 54 55
        mAdapter = new UserAdapter(mUsers);
        mRootView.setAdapter(mAdapter);//设置Adapter
    }

    public void requestUsers(final boolean pullToRefresh) {
J
jessyan 已提交
56 57 58 59 60 61 62 63 64
        //请求外部存储权限用于适配android6.0的权限管理机制
        PermissionUtil.externalStorage(new PermissionUtil.RequestPermission() {
            @Override
            public void onRequestPermissionSuccess() {
                //request permission success, do something.
            }
        }, mRxPermissions, mRootView, mErrorHandler);


J
jessyan 已提交
65 66 67 68
        if (pullToRefresh) lastUserId = 1;

        mModel.getUsers(lastUserId, pullToRefresh)
                .subscribeOn(Schedulers.io())
J
jessyan 已提交
69
                .retryWhen(new RetryWithDelay(3, 2))//遇到错误时重试,第一个参数为重试几次,第二个参数为重试的间隔
J
jessyan 已提交
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
                .doOnSubscribe(new Action0() {
                    @Override
                    public void call() {
                        if (pullToRefresh)
                            mRootView.showLoading();//显示上拉刷新的进度条
                        else
                            mRootView.startLoadMore();
                    }
                }).subscribeOn(AndroidSchedulers.mainThread())
                .observeOn(AndroidSchedulers.mainThread())
                .doAfterTerminate(new Action0() {
                    @Override
                    public void call() {
                        if (pullToRefresh)
                            mRootView.hideLoading();//隐藏上拉刷新的进度条
                        else
                            mRootView.endLoadMore();
                    }
                })
J
jessyan 已提交
89
                .compose(((BaseActivity) mRootView).<List<User>>bindToLifecycle())//使用RXlifecycle,使subscription和activity一起销毁
J
jessyan 已提交
90
                .subscribe(new ErrorHandleSubscriber<List<User>>(mErrorHandler) {
J
jessyan 已提交
91 92 93 94 95 96 97 98 99 100
                    @Override
                    public void onNext(List<User> users) {
                        lastUserId = users.get(users.size() - 1).getId();//记录最后一个id,用于下一次请求
                        if (pullToRefresh) mUsers.clear();//如果是上拉刷新则晴空列表
                        for (User user : users) {
                            mUsers.add(user);
                        }
                        mAdapter.notifyDataSetChanged();//通知更新数据
                    }
                });
J
jessyan 已提交
101 102
    }
}