java——分页(先加载全部数据,然后把数据分页进行加载)、异步任务AsyncTask

1、先加载全部数据,然后把数据按照20条一页进行加载(不需要UI主动去调分页)

java 复制代码
class PageLoad extends Thread {
        int page = 0;
        List<MultiItemEntity> cBillPickSelectUIS;

        public PageLoad(List<MultiItemEntity> entitys) {
            Log.e("TAG","分页加载===");
            cBillPickSelectUIS = entitys;
        }

        public void run() {
            if (cBillPickSelectUIS == null) return;
            if (cBillPickSelectUIS.size() < 20) {
                requireActivity().runOnUiThread(() -> { // 这里使用handle去更新就不需要用到requireActivity()
                    mSelAdapter.setNewData(cBillPickSelectUIS);
                });

            } else {
                HashMap<Integer, List<MultiItemEntity>> hashMap = splitArray(cBillPickSelectUIS, 20);
                hashMap.get(page);
                hashMap.forEach((integer, multiItemEntities) -> {

//                    if (integer>4) return; //只展示前4条
                    try {
                        Thread.sleep(1000);
                        requireActivity().runOnUiThread(() -> {// 这里使用handle去更新就不需要用到requireActivity()
                            mSelAdapter.addData(multiItemEntities);
                            mSelAdapter.notifyDataSetChanged();
                        });
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                });
            }
        }
        public HashMap<Integer, List<MultiItemEntity>> splitArray(List<MultiItemEntity> originalArray, int chunkSize) {
            if (originalArray == null || originalArray.size() == 0 || chunkSize <= 0) {
                return new HashMap();
            }
            //这里如何把originalArray数组拆分成多个数组?每个数组50长度,然后返回HashMap
            HashMap<Integer, List<MultiItemEntity>> resultMap = new HashMap<>();
            int index = 0;
            for (int i = 0; i < originalArray.size(); i += chunkSize) {
                List<MultiItemEntity> subList = new ArrayList<>(originalArray.subList(i, Math.min(i + chunkSize, originalArray.size())));
                resultMap.put(index++, subList);
            }
            return resultMap;
        }
    }

调用:

java 复制代码
new PageLoad(cBillPickSelectUIS).start();

2、异步任务AsyncTask

java 复制代码
private class LoadDataTask extends AsyncTask<Void, Void, List<MultiItemEntity>> {
        private int selflag;
        private int patienttypeflag;
        private String sDate;
        private String eDate;
        private List<CPickBillSelectDept> dlist;
        private int pickOrCancel;

        public LoadDataTask(int selflag, int patienttypeflag, String sDate, String eDate, List<CPickBillSelectDept> dlist, int pickOrCancel) {
            this.selflag = selflag;
            this.patienttypeflag = patienttypeflag;
            this.sDate = sDate;
            this.eDate = eDate;
            this.dlist = dlist;
            this.pickOrCancel = pickOrCancel;
        }

        @Override
        protected List<MultiItemEntity> doInBackground(Void... voids) {
            return billPickRepository.getPickBillSelList(selflag, patienttypeflag, sDate, eDate, dlist, pickOrCancel);// 耗时任务
        }

        @Override
        protected void onPostExecute(List<MultiItemEntity> result) {
            // 在这里处理后台任务返回的结果,例如更新UI
            billpicksellist.postValue(result);
        }
    }
相关推荐
FITA阿泽要努力3 分钟前
Agent Engineer-Day 1 初始智能体与大语言模型基础
java·前端·javascript
2601_949868365 分钟前
Flutter for OpenHarmony 电子合同签署App实战 - 数据持久化实现
java·数据库·flutter
Tiger Z5 分钟前
《R for Data Science (2e)》免费中文翻译 (第18章) --- Missing values
开发语言·r语言
csbysj20209 分钟前
Python 列表(List)
开发语言
码农阿豪11 分钟前
基于Milvus与混合检索的云厂商文档智能问答系统:Java SpringBoot全栈实现
java·spring boot·milvus
局外人LZ13 分钟前
Decimal.js 完全指南:解决前端数值精度痛点的核心方案
开发语言·前端·javascript
阿蒙Amon13 分钟前
C#每日面试题-Task和Thread的区别
java·面试·c#
比奇堡鱼贩18 分钟前
python第二次作业--函数
linux·运维·windows
咸甜适中19 分钟前
rust的docx-rs库读取docx文件中的文本内容(逐行注释)
开发语言·rust·docx·docx-rs
索荣荣22 分钟前
Java异步编程终极实战指南
java·开发语言