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);
        }
    }
相关推荐
SimonKing7 小时前
全面解决中文乱码问题:从诊断到根治
java·后端·程序员
OxYGC8 小时前
[玩转GoLang] 5分钟整合Gin / Gorm框架入门
开发语言·golang·gin
锐策8 小时前
Lua 核心知识点详解
开发语言·lua
你三大爷8 小时前
再探volatile原理
java
2301_781668618 小时前
Redis 面试
java·redis·面试
郑洁文8 小时前
基于SpringBoot的天气预报系统的设计与实现
java·spring boot·后端·毕设
水饺编程8 小时前
Windows 命令行:cd 命令3,当前目录,父目录,根目录
c语言·c++·windows·visual studio
kyle~8 小时前
C/C++---动态内存管理(new delete)
c语言·开发语言·c++
沃夫上校8 小时前
MySQL 中文拼音排序问题
java·mysql
Dcs8 小时前
用 Python UTCP 直调 HTTP、CLI、MCP……
java