java-如何正确使用GreenDao LazyList处理大量数据并进行排序和过滤

java-如何正确使用GreenDao LazyList处理大量数据并进行排序和过滤,第1张

概述我正在尝试在androidlistview中实现分页.背景:我通过网络服务下载了约6万个数据集,并使用GreenDao将其保存到SQLite数据库中.现在,我想在ListView中访问此60k行,然后选择一些(0-10).所选项目将发送到仅包含所选内容的另一个ListView.所有60k条目的db条目约为3MB.已实施的内容:>

我正在尝试在android ListvIEw中实现分页.

背景:我通过网络服务下载了约6万个数据集,并使用GreenDao将其保存到sqlite数据库中.现在,我想在ListVIEw中访问此60k行,然后选择一些(0-10).所选项目将发送到仅包含所选内容的另一个ListVIEw.所有60k条目的db条目约为3 MB.

已实施的内容:

> sqlite数据库
> DAO
>列表视图
>适配器
> Transferlogic数据ListVIEw->所选数据列表视图

ListVIEw显示在DialogFragment中.我想到了使用GreenDao LazyList类的想法,因为此列表可以加载单个项目,而无需直接加载所有项目.

由于LazyList不允许更改列表(删除,添加,清除)

我做了以下事情:
ListVIEw有一个Adapter类,该类使用DialogFragment中的java.util.List来查询LazyList(全部获取)或使用EditText来应用like子句.

第一次查询60k条目时,我将前50个项目加载到适配器中并在ListVIEw中显示它们.我以后不会使用导航栏更改项目.

我希望EditText在用户键入时直接起作用,所以我添加了Textchangelistener.

edittext.addTextChangedListener(new TextWatcher() {        @OverrIDe        public voID beforeTextChanged(CharSequence s, int start, int count, int after) {        }        @OverrIDe        public voID onTextChanged(CharSequence s, int start, int before, int count) {        }        @OverrIDe        public voID afterTextChanged(Editable s) {            if(lazyList != null) {                if(!lazyList.isClosed()) {                    lazyList.close();                    lazyList = null;                }            }            if(s.length() <= 1) {                queryBuilder qb = session.getCodeSystemDao().queryBuilder();                lazyList = qb.ListLazyUncached();                resetListVIEw();            }            else {                queryBuilder qb = session.getCodeSystemDao().queryBuilder();                qb.where(DataDao.PropertIEs.Value.like("%"+s.toString()+"%"));                lazyList = qb.ListLazyUncached();                resetListVIEw();            }        }    });

问题是:虽然仅输入1-4个字符,但由于光标存储器已满,因此不会显示列表,请参阅日志:

W/CursorWindow: Window is full: requested allocation 48 bytes, free space 19 bytes, window size 2097152 bytes

关闭列表后,我可以使用GC,但是直接在Java中使用GC是很痛苦的.有一个更好的方法吗? (实际上,我尝试过一次,但是没有用).

我需要这些值是可搜索的(通向许多条目),并且它必须是可排序的.

如果单击“按字母顺序排序”的按钮,它将在GreenDAO queryBuilder中同时使用(edittext [for like]和ORDER)来加载新的惰性列表(例如textwatcher order子句).

解决方法:

您可能不应该在这里使用LazyList.分页通常通过使用liMIT和OFFSET参数的查询来完成.

在此处检查“限制,偏移和分页”部分:http://greenrobot.org/greendao/documentation/queries/

总结

以上是内存溢出为你收集整理的java-如何正确使用GreenDao LazyList处理大量数据并进行排序和过滤全部内容,希望文章能够帮你解决java-如何正确使用GreenDao LazyList处理大量数据并进行排序和过滤所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1120615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存