Android中的实时搜索

时间:2015-06-05 18:49:23

标签: android json filtering

我有以下任务要做,我需要从端点构建实时搜索。

现在,事情是我知道该怎么做但是,我不知道的是,如何有效地做到这一点。小应用程序应该执行以下操作:

  1. 从特定端点实时搜索 - json请求中超过2000个对象的列表。
  2. 加载时,应用应显示微调器。
  3. 刷新自动填充列表视图。
  4. 我所知道的唯一解决方案如下:

    我在添加搜索视图的操作栏中添加了一个菜单。 在活动内部,我将有一个带有列表视图的片段(当我想添加一些点击项目时更好),以及当用户搜索某些内容时(例如,"周围," a"首先,然后" ar"等)然后将向服务器发出新请求,并且所有以" a"将被加载到列表视图,从那时起自动完成将完成其工作。

    通过这种方式,我需要加载包含" a"的所有数据。并从那里过滤。

    现在我的问题是我需要每次解析json文件,而且我可能只需要3条记录。

    作为一项改进,我想到了以某种方式过滤json大文件并仅检索我需要的json文件,但我不确定这是否可行,如果是这样的话会花费多少。

    有谁知道更好的解决方案?

1 个答案:

答案 0 :(得分:1)

由于您无法更改服务器端组件,因此您必须使客户端更智能。

此处的方法是(建议 @pskink )在本地存储数据。如果您对搜索视图中的每个输入/删除字符发出单个请求,那么您实际上是在为其服务器进行DOS操作。此外,这将是缓慢的。

面临的挑战是在本地缓存数据,但要保持“新鲜”,以免它从服务器上的数据中转移太多。实现这一点比听起来更难。

我建议在活动开始后立即从后端加载整个JSON 。根据此列表中每个单独条目的大小,您可能会将它们全部保留在内存中并对其进行过滤(我认为树可能是一个很好的起点)。

如果您遇到此解决方案的任何性能或内存问题,我建议将数据移动到某种数据库中(它不需要是SQLite,Realm也可能很有趣)。当然,同样的挑战也适用于保持数据的最新状态。

既然你说他们告诉你,我想你正在和服务器组件背后的人一起工作。在这种情况下,我发现最好的方法是实现一个有效的解决方案(上面的任何一个)并向他们展示。如果它不够快,请提出建议:

  • 他们可以为您提供一个API,以便在给定日期之后只获取新的/更改的条目(因此您只需更新数据库)。
  • 也可以制作混合模型:首先过滤离线数据,但也向服务器发出请求(使用过滤器参数或其他内容)并混合生成的数据。向用户表明您正在获取更多“最新”数据,但向他们显示您已知的结果。如果经常删除条目,这可能不会很好。