2015-06-24 8 views
5

मैं खोज सुझाव ढांचे के साथ काम कर रहा हूं और यहां मामला है। मुझे कुछ क्वेरी स्ट्रिंग मिलती है और सामग्री रिज़ॉल्वर से क्वेरी बनाते हैं, लेकिन समस्या यह है कि मैं परिणामों को सीमित नहीं कर सकता। कई समाधान मिला लेकिन वे मेरे लिए काम नहीं करते हैं।Android SearchRecentSuggestionsProvider क्वेरी सीमा

मेरे सामग्री प्रदाता SearchRecentSuggestionsProvider का विस्तार और प्रकट में घोषित किया जाता है, यहां क्वेरी uri Uri URI = Uri.parse("content://" + AUTHORITY + "/search_suggest_query");

सोल 1: क्वेरी पैरामीटर जोड़ने उरी के

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");

दोनों मामलों में क्वेरी खोज सुझावों से सभी पंक्तियां लौटाती है। क्या कोई इस तरह की क्वेरी को सीमित करने के बारे में जानता है?

+2

SUGGEST_PARAMETER_LIMIT क्वेरी पैरामीटर सुझाव प्रश्नों को जोड़ा गया से दिए गए सुझावों की संख्या को सीमित करने के लिए है। ** यह सीमा केवल सलाहकार है और सुझाव प्रदाताओं ने इसे अनदेखा करना चुना है **। – pskink

+0

एक बेहतर समाधान है, एक पूरी तरह से अलग तरीका है, मैंने –

उत्तर

4

नीचे ढांचे में आधार वर्ग SearchRecentSuggestionsProvider में क्वेरी विधि है

/** 
    * This method is provided for use by the ContentResolver. Do not override, or directly 
    * call from your own code. 
    */ 
    // TODO: Confirm no injection attacks here, or rewrite. 
    @Override 
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 
      String sortOrder) { 

संभावित आप इसे ओवरराइड और सीमित लागू कर सकते हैं - लेकिन जैसा कि आप ऊपर यह स्पष्ट राज्यों टिप्पणी देख सकते हैं "ओवरराइड नहीं करते" । मौजूदा विधि में कोई सीमा लागू नहीं की गई है।

हालांकि मैं स्टैक ओवरफ्लो और अन्य साइटों पर कुछ अन्य उत्तरों में देखता हूं जो लोग इसे ओवरराइड करते हैं।

उदाहरण: Use SearchRecentSuggestionsProvider with some predefined terms?

इस मुझे लगता है कि आप इसे बाहर की कोशिश कर सकते के आधार पर - क्वेरी विधि ओवरराइड और अपने खुद के कार्यान्वयन का समर्थन करता है जो परिणाम सीमित जोड़ें। SearchManager.SUGGEST_PARAMETER_LIMIT को पार्स करें जिसे आपने क्वेरी विधि में उपयोग किया है और लौटाए गए परिणामों को सीमित करने के लिए इसका उपयोग करें।

+1

से नीचे का जवाब जोड़ा है "वास्तव में डेटाबेस से पूछताछ या इस डेटा स्रोत का जो भी हो, इस सीमा का उपयोग करें" यह प्रश्न विशेष रूप से SearchRecentSuggestionsProvider से संबंधित है। इस मामले के लिए 'क्वेरी' को ओवरराइड करने के तरीके के बारे में अधिक विशिष्ट रहें। – lf215

+1

क्षमा करें मैंने शुरुआत में प्रश्न को गलत समझा। अब और अधिक विशिष्ट विवरण जोड़ा गया। – RocketRandom

+0

एक पूरी तरह से अलग तरीके से एक बेहतर समाधान है, मैंने –

2

असल में, हम गलत जगह पर खोज रहे थे। इन सभी जांचों के बाद, अंत में मुझे चाल मिली।

परिणाम स्क्रीन पर (जहां हम खोज SearchRecentSuggestions करने के लिए क्वेरी बचाने के लिए) हम इस विधि

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

SearchRecentSuggestions सामग्री प्रदाता को इस क्वेरी को बचाने के लिए जिम्मेदार था कहते हैं।

इस वर्ग में यह बढ़ रही है बहुत बड़ी से रोकने के लिए इस दस्तावेज़

इतिहास तालिका की लंबाई कम कर देता है के साथ truncateHistory() नामक एक संरक्षित विधि है।

तो समाधान बस एक कस्टम वर्ग बनाएं, इस विधि को ओवरराइड करें, और आवश्यक सीमा के साथ सुपर कार्यान्वयन को कॉल करें।

यहाँ उदाहरण

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); 
    } 
} 
+0

से नीचे का जवाब जोड़ा, यदि मैं सही समझ गया, तो यह पूरे टेबल आकार को सीमित कर देगा, लेकिन मैं जो पूछ रहा था वह क्वेरी पंक्तियों की राशि को सीमित करने का तरीका है? या आपका समाधान टेबल आकार को प्रभावित नहीं करेगा? – greenfrvr

+0

हां, यह तालिका के आकार को प्रभावित करता है, लेकिन फिर भी शीर्ष 5 को हाल ही में सहेजता है। तालिका आकार को 5 तक कम करके क्वेरी पंक्तियों को प्रभावित करेगा। लेकिन यदि आप एक विकल्प चाहते हैं जैसे अधिक इतिहास क्वेरी दिखाएं, तो यह आपकी मदद नहीं करेगा। –