UserPresenter.java 3.9 KB
Newer Older
J
jessyan 已提交
1 2 3 4 5 6
package me.jessyan.mvparms.demo.mvp.presenter;

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 已提交
7 8
import com.jess.arms.utils.PermissionUtil;
import com.tbruyelle.rxpermissions.RxPermissions;
J
jessyan 已提交
9 10 11 12 13 14 15 16 17 18 19

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 已提交
20
import me.jessyan.rxerrorhandler.handler.RetryWithDelay;
J
jessyan 已提交
21 22 23 24 25 26 27 28 29 30 31
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 已提交
32
    private RxPermissions mRxPermissions;
J
jessyan 已提交
33 34 35 36 37 38
    private List<User> mUsers = new ArrayList<>();
    private DefaultAdapter mAdapter;
    private int lastUserId = 1;


    @Inject
J
jessyan 已提交
39 40
    public UserPresenter(UserContract.Model model, UserContract.View rootView, RxErrorHandler handler
            , RxPermissions rxPermissions) {
J
jessyan 已提交
41 42
        super(model, rootView);
        this.mErrorHandler = handler;
J
jessyan 已提交
43
        this.mRxPermissions = rxPermissions;
J
jessyan 已提交
44 45 46 47 48
        mAdapter = new UserAdapter(mUsers);
        mRootView.setAdapter(mAdapter);//设置Adapter
    }

    public void requestUsers(final boolean pullToRefresh) {
J
jessyan 已提交
49 50 51 52 53 54 55 56 57 58

        //请求外部存储权限用于适配android6.0的权限管理机制
        PermissionUtil.externalStorage(new PermissionUtil.RequestPermission() {
            @Override
            public void onRequestPermissionSuccess() {
                //request permission success, do something.
            }
        }, mRxPermissions, mRootView, mErrorHandler);


J
jessyan 已提交
59 60 61 62
        if (pullToRefresh) lastUserId = 1;

        mModel.getUsers(lastUserId, pullToRefresh)
                .subscribeOn(Schedulers.io())
J
jessyan 已提交
63
                .retryWhen(new RetryWithDelay(3, 2))//遇到错误时重试,第一个参数为重试几次,第二个参数为重试的间隔
J
jessyan 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
                .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 已提交
83
                .compose(((BaseActivity) mRootView).<List<User>>bindToLifecycle())//使用RXlifecycle,使subscription和activity一起销毁
J
jessyan 已提交
84
                .subscribe(new ErrorHandleSubscriber<List<User>>(mErrorHandler) {
J
jessyan 已提交
85 86 87 88 89 90 91 92 93 94
                    @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 已提交
95 96
    }
}