处理搜索的最佳实践

时间:2015-07-07 18:38:06

标签: android search searchview otto

我有一个SearchView设置,我使用RetrofitOtto建立了松散的分离架构。

我想知道最佳做法对于Android中的搜索或一般的任何移动应用程序(意味着类似的东西也可以应用于iOS)是什么。

具体而言,我使用AutoCompleteTextView来处理SearchView中的建议,数据直接来自API。我不认为这是最佳做法,因为每次用户更改SearchView中的文本时都会启动API调用。

我正在考虑在SQLite中存储缓存,然后从那里ping结果,但如果用户想要最直接的数据呢?你会怎么处理?采用什么模式?

非常感谢有关Android中搜索的最佳架构或方法的任何想法。

3 个答案:

答案 0 :(得分:10)

我认为在用户停止输入之前进行API调用是没有意义的。所以,你可以延迟500毫秒。当用户停止输入时,在500毫秒后,您进行API调用并显示结果。

您可以使用Handler的{​​{1}}方法来安排搜索API调用。您可以使用Handler来控制消息队列。每次用户键入字符并取消之前的消息时,您都会发布延迟postDelayed。看起来会这样:

Runnable

答案 1 :(得分:1)

  • 首先,您必须将列设为索引,即搜索属性。
  • 你必须只在sqlite数据库上存储该列。当用户进行搜索时,它用于从你的表中选择选项。
  • 然后在搜索栏中选择的单词之后调用api搜索结果。

答案 2 :(得分:0)

所以要以充分的方式回答这个问题,因为我对这里的其他答案不满意,在这个问题上还有一些步骤需要考虑。

首先,我们需要就如何解决这个问题提出几个问题:

  • 是否有自动填充功能?
  • 搜索的范围是什么?
  • 会有缓存吗?

还有更多问题。

我可能首先构建一个自定义适配器来处理搜索中的查询,然后对用户的查询实施积极的缓存。从用户的查询非常重要的角度来看,这很重要。仅使用Autocomplete的缓存结果可能是有意义的,实现自动完成并在每次文本更改时ping服务器都非常昂贵。

可以使用Android中的SQLite助手来完成缓存。这可能很昂贵,但我们正在处理简单的查询对象(因为这应该是API的情况,对象应该是内存或字节大小昂贵)。