gpt4 book ai didi

Android SearchRecentSuggestionsProvider 查询限制

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:25:40 24 4
gpt4 key购买 nike

我正在使用搜索建议框架,情况就是这样。我得到一些查询字符串并从内容解析器进行查询,但问题是我无法限制结果。找到了几个解决方案,但它们对我不起作用。

我的内容提供者正在扩展 SearchRecentSuggestionsProvider 并在 list 中声明,这里是查询 uriUri URI = Uri.parse("content://"+ AUTHORITY + "/search_suggest_query");

解决方案 1:向uri添加查询参数

SearchSuggestionProvider.URI.buildUpon().appendQueryParameter(SearchManager.SUGGEST_PARAMETER_LIMIT, String.valueOf(5)).build()

解决方案 2:在 sortOrder 查询参数中添加限制

getContentResolver().query(URI, null, "?", new String[]{searchQuery}, "_id asc limit 5");

在这两种情况下,查询都会返回搜索建议中的所有行。有谁知道如何限制这样的查询?

最佳答案

其实,我们找错地方了。经过所有这些调查,我终于找到了诀窍。

在结果屏幕上(我们将查询保存到搜索 SearchRecentSuggestions 的地方)我们调用此方法

SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
SearchSuggestionProvider.AUTHORITY, SearchSuggestionProvider.MODE);
suggestions.saveRecentQuery(query, null);

SearchRecentSuggestions负责将此查询保存到内容提供者。

这个类有一个 protected 方法,叫做 truncateHistory() 和这个文档

Reduces the length of the history table, to prevent it from growing too large.

所以解决方案很简单,创建一个自定义类,重写这个方法,然后调用具有所需限制的 super 实现。

这是例子

public class SearchRecentSuggestionsLimited extends SearchRecentSuggestions {

private int limit;

public SearchRecentSuggestionsLimited(Context context, String authority, int mode, int limit) {
super(context, authority, mode);
this.limit = limit;
}

@Override
protected void truncateHistory(ContentResolver cr, int maxEntries) {
super.truncateHistory(cr, limit);
}
}

关于Android SearchRecentSuggestionsProvider 查询限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31020577/

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