14

我有一个设置,并且我有一个使用andSearchView的松散解耦架构。RetrofitOtto

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

具体来说,我正在使用AutoCompleteTextView来处理我SearchView的建议,并且数据直接来自API. 我不认为这是最佳实践,因为每次用户更改文本时SearchView都会启动 API 调用。

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

如果您对 Android 中搜索的最佳架构或方法有任何想法,将不胜感激。

4

3 回答 3

11

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

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

public void onTextChanged(CharSequence s, int start, int before, int count) {
    handler.removeCallbacks(searchRunnable);
    handler.postDelayed(searchRunnable, 500);
}
于 2015-07-07T18:47:52.480 回答
1
  • 首先,您必须将该列作为搜索属性的索引。
  • 您只需将该列存储在 sqlite 数据库中。当用户进行搜索时,它用于从您的表中选择选项。
  • 然后在搜索栏中选择的单词之后调用 api 搜索结果。
于 2015-07-20T13:28:36.470 回答
0

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

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

  • 有自动完成吗?
  • 搜索范围是什么?
  • 会有缓存吗?

还有更多问题。

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

缓存可以通过使用SQLiteAndroid 中的帮助程序来完成。这可能很昂贵,但我们正在处理简单的查询对象,(从 API 来看应该是这种情况,对象应该是内存或字节大小昂贵)。

于 2015-09-26T22:19:29.620 回答