Android 数据加载与分页业务

1,前言

这篇文章写的是数据加载和分页。用到的库有

 'androidx.lifecycle:lifecycle-service:2.4.0'
 'androidx.lifecycle:lifecycle-extensions:2.2.0'
 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
io.reactivex.rxjava3:rxjava:3.0.4 
io.reactivex.rxjava3:rxandroid:3.0.0
androidx.lifecycle:lifecycle-livedata-ktx:2.1.0

代码有些地方一开始设计的时候多想了,其实有些地方设计不太好,不过不影响实际代码,我就暂时没改

2.开始

1)基本接口

->这里混合了kotlin   java,因为一开始写的时候是java后面用kotlin写

/**
 * 书本目录的接口
 */
public interface Book {

    /**
     * 当前一页加载的数据
     * @return
     */
    int pageSize();

    /**
     * 从哪一页开始
     * @return
     */
    int thisStartPage();

}

/**
 * 数据加载接口
 * @param Entity
 */
interface IDataEngine<Entity> : Book {
    fun getRemoteData(page: Int): Observable<Entity>?
}
 
/**
 * 书本数据加载的一个基本引擎接口
 * 具有从新加载,分页,最后页数,总阅览(realData)数据等业务
 */
interface IPageEngine<Item> : Book, ISource<Item> {
    fun refresh()
    operator fun next()
    fun state(): Int
    fun loadState(): Int
    fun page(): Int
    fun lastSize(): Int

    /**
     * page id的
     * 如果刷新,那么此id就会更新。他的含义就是此次刷新数据组的id,下拉不会改变此数值
     *
     * @param observer Observer<Int>
     */
    fun registerPageIdObserver(observer: Observer<Int>)

    companion object {
        const val NONE: Int = -1
        const val STATE_END_REFRASH = 991
        const val STATE_START_NEXT = 996
        const val STATE_START_REFRASH = 998
        const val STATE_END_ERROR = 997
        const val STATE_END_NEXT = 992
        const val NO_MORE_PAGE = 993
        const val PAGE_SIZE = 20
    }
}

/**
 * 返回一个lifecycle
 */
interface ILifeObject{
    fun lifecycleOwner(): LifecycleOwner?
}

/**
 * 处理数据
 * @param <T>
 */
public interface DataBusiness<T> {

    void handlerData(T t, int action);

}

2)核心实现类 PageSupport.class

/**
 * Book ,此类是分页加载具体实现类
 *
 * @param <ListItem>   每项数据的泛型{@link #data}
 * @param <DataEntity> remote 数据端加载进入来的未过滤的基本数据泛型 通过{@link CallBack#transformDataToList(DataEntity)} 转化成{@link #data}
 */
public class PageSupport<ListItem, DataEntity> implements IPageEngine<ListItem>, Observer<DataEntity> {

    private static final String TAG = "PageSupport";

    /**
     * 分页的最基本的数据存储原型
     */
    private final List<ListItem> data = new SgArrayList<>();
//    /**
//     * 是否正在加载
//     */
//    private boolean isLoaderNow = false;
    /**
     * 一个提供给外部实现的回调函数
     * 用户处理不同业务情况
     */
    protected CallBack<ListItem, DataEntity> callBack;
    /**
     * 最后一此的数据长度
     */
    private int lastSize = 0;
    private int size2 = 0;
    private int maxPage = -1;
    private boolean isEndPage = false;
    private final MutableLiveData<Integer> state = new MediatorLiveData<Integer>();
    private final MutableLiveData<Integer> size = new MutableLiveData<>();
    private final MutableLiveData<Integer> page = new MutableLiveData<Integer>() {
        @Override
        public void setValue(Integer value) {
//            if (isLoaderNow) {
//                ToastUtil.s("正在拼命加载~");
//                return;
//            }
//            isLoaderNow = true;
            if (Thread.currentThread() != Looper.getMainLooper().getThread()) {
                super.postValue(value);
                return;
            }
            super.setValue(value);
        }
    };

    private final MutableLiveData<Integer> loadId = new MutableLiveData<>(0);

    private FlashObserver<DataEntity> mFlashObserver;
//    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、 以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员 快速开发自己的APP 已集成第三方开源组件: 网络请求库android-async-http 图片异步加载库universal-image-loader Sqlite数据库操作ormlite-android 社会化分享ShareSDK+短信验证码 Zxing二维码库 百度地图定位SDK 谷歌依赖注入库RoboGuice WebService调用库ksoap2 XML解析XStream 动画开源库nineoldandroids 表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求WebService接口 Sqlite数据库操作工具类(ToolDatabase.java),获取DAO、创建表、删除表等API 提示信息对话框工具类(ToolAlert.java),已集成泡泡、土司、对话框三种提示 文件操作工具类(ToolFile.java),assets/raw/xml/shrePerface/等文件读写API 地图定位工具类(ToolLocation.java),读取GPS状态、请求定位、获取经纬度等方法 社会化分享工具类(ToolShareSDK.java),各大开发平台分享API操作 短信验证码工具类(ToolMSM.java),移动/联通/电信三网发送手机短信验证码、异步回调验 证结果 字符串操作工具类(ToolString.java),生成UUID、非空非NULL逻辑判断、生成MD5等常用共 通方法 数据操作工具类(ToolData.java),自动递归获取表单数据封装成Map、本地数据分页共通方 法等 图片操作工具类(ToolPicture.java),生成二维码、验证码、灰度、合成、圆角、水印等操 作 读取本地资源工具类(ToolResource.java),反射本地资源文件API,避免依赖R文件,方便 jar形式发布 Android单位转换工具类(ToolUnit.java),sp/dp/px互转 自定义Toast工具类(ToolToast.java),自定义背景色、字体颜色、大小、边框等 Properties操作工具类(ToolProperties.java),读写Properties文件操作 网络操作工具类(ToolNetwork.java),获取网络信息、更改切换网络等相关操作 日期操作工具类(ToolDateTime.java),获取日期、日期加减、格式化日期、日期转换等操作 XML操作工具类(ToolXml.java),基于DOM/XMLPullPaser模式解析、生成XML操作 XMPP操作工具类(ToolXMPP.java),基于XMPP协议的相关API操作 适配字体工具类(ToolAutoFit.java),代码根据设备密度自动缩放View的字体大小 LOG相关工具类(ToolLog.java) 功能待续-->切入记录异常日志,并存储文件或上传至服务 器 已封装/收集自定义控件: 兼容低版本的SwitchButton 追加自定义属性Value的CheckBox/RadioButton/RadioGroup/SingleSpinner 圆角提示信息TipsView 圆角图片RoundImageView 自定义样式风格Progres
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值