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);
        }
    }
相关推荐
不当菜虚困1 分钟前
windows下HSDB导出class文件报错【java.io.IOException : 系统找不到指定的路径。】
java·开发语言
lsx2024064 分钟前
Vue.js 循环语句
开发语言
m0_561359674 分钟前
嵌入式C++加密库
开发语言·c++·算法
小马爱打代码8 分钟前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端
j4455661112 分钟前
C++中的职责链模式实战
开发语言·c++·算法
m0_6860416116 分钟前
实时数据流处理
开发语言·c++·算法
梵刹古音17 分钟前
【C语言】 字符型变量
c语言·开发语言·嵌入式
草履虫建模22 分钟前
A13 String 详解:不可变、常量池、equals 与 ==、性能与常见坑
java·开发语言·spring·jdk·intellij-idea·java基础·新手
知无不研28 分钟前
内存碎片与内存优化
开发语言·c++·内存优化·内存碎片·内存操作
invicinble29 分钟前
学习的门道和思路
java·开发语言·学习