首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理搜索的最佳实践

处理搜索的最佳实践
EN

Stack Overflow用户
提问于 2015-07-07 18:38:06
回答 3查看 2K关注 0票数 14

我有一个SearchView设置,并且我有一个使用RetrofitOtto的松散解耦的体系结构。

我想知道最佳实践是用于安卓搜索的,还是一般的移动应用程序(这意味着类似的东西也可以应用于iOS )。

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-26 22:19:29

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

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

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

还有很多问题。

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

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

票数 0
EN

Stack Overflow用户

发布于 2015-07-07 18:47:52

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

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

代码语言:javascript
复制
public void onTextChanged(CharSequence s, int start, int before, int count) {
    handler.removeCallbacks(searchRunnable);
    handler.postDelayed(searchRunnable, 500);
}
票数 11
EN

Stack Overflow用户

发布于 2015-07-20 13:28:36

  • 首先,必须将列作为索引,即搜索属性。
  • 当用户进行搜索时,您只需将该列存储在sqlite database.Its上,该列用于从表中选择选项。
  • 然后,在搜索栏中选定的单词之后,调用搜索结果的api。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31276718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档