gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:39 27 4
gpt4 key购买 nike

我正在尝试在 android listview 中实现分页。

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

已经实现的内容:

  • SQLite 数据库
  • DAO
  • ListView
  • 适配器
  • Transferlogic 数据 ListView --> 选中的数据 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 正确处理大量数据 + 排序和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35454584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com