2012-03-27 18 views
12

का उपयोग कर सीमा खंड को जोड़ने के लिए कैसे सामग्री प्रदाता से लौटाई गई पंक्तियों की संख्या को सीमित करने का कोई तरीका है? मुझे यह solution मिला, हालांकि, यह मेरे लिए काम नहीं करता था। सभी पंक्तियां अभी भी वापस आ रही हैं।सामग्री प्रदाता

Uri uri = Playlists.createIdUri(playlistId); //generates URI 
uri = uri.buildUpon().appendQueryParameter("limit", "3").build();  
Cursor cursor = activity.managedQuery(playlistUri, null, null, null, null); 
+0

बस एक विचार। लेकिन आप सीमा पैरा को अंतिम पैरामीटर के रूप में डालने का प्रयास कर सकते हैं। इस तरह की गतिविधि की तरह .managedQuery (playlistUri, शून्य, शून्य, शून्य, "सीमा 3")? – Renard

उत्तर

33

मैं इस मुद्दे था और जब तक मैं अंत में यह समझ से बाहर है, या बल्कि एक whay कि मेरे लिए काम किया हो गया मेरे सिर तोड़ने के लिए किया है। निम्नलिखित

Cursor cursor = activity.managedQuery(playlistUri, null, null, null, " ASC "+" LIMIT 2"); 

अंतिम पैरामीटर sortOrder के लिए है। मैंने सॉर्ट ऑर्डर प्रदान किया और इसमें एलआईटी भी लगाया। सुनिश्चित करें कि आप रिक्त स्थान सही तरीके से दें। मुझे उस प्रश्न की जांच करनी थी जिसे बनाया जा रहा था और यह काम करना प्रतीत होता था।

+6

"एएससी लिमिटेड 2" काम नहीं करेगा? –

+0

अगर ऑर्डर ऑर्डर में पिछली 2 पंक्तियों की आवश्यकता होती है तो काम नहीं करेगा। यह पहली दो पंक्तियां – ozmank

+0

लाएगा बेहतर दृष्टिकोण के लिए [यहां] देखें (http://stackoverflow.com/a/24055457/313113) – bitek

2

एक सामग्री प्रदाता सामान्य सिद्धांत पर सीमा पैरामीटर पर ध्यान देना चाहिए। दुर्भाग्यवश, यह सार्वभौमिक रूप से कार्यान्वित नहीं है।

उदाहरण के लिए, जब SearchManager प्रश्नों को संभालने के लिए एक सामग्री प्रदाता लेखन:

String limit = uri.getQueryParameter(SearchManager.SUGGEST_PARAMETER_LIMIT); 

कहाँ यह लागू नहीं है आप केवल प्रकार खंड पर एक सीमा चिपकाने की बदसूरत विकल्प पर वापस गिर सकती है।

2

दुर्भाग्यवश, ContentResolver सीमा तर्क होने पर क्वेरी नहीं कर सकता है। आपके ContentProvider के अंदर, आपका MySQLQueryBuilder अतिरिक्त सीमा पैरामीटर जोड़ने में क्वेरी कर सकता है।

एजेंडा के बाद, हम ContentProvider के अंदर एक अतिरिक्त यूआरआई नियम जोड़ सकते हैं।

static final int ELEMENTS_LIMIT = 5; 
public static final UriMatcher uriMatcher; 

static { 
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
........ 
uriMatcher.addURI(AUTHORITY, "elements/limit/#", ELEMENTS_LIMIT); 
} 
तो आपकी क्वेरी विधि की गतिविधि से

String limit = null; //default.... 
    switch(uriMatcher.match(uri)){ 
     ....... 
       case ELEMENTS_LIMIT: 
        limit = uri.getPathSegments().get(2); 
       break; 
     ...... 

      } 

return mySQLBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder, limit); 

क्वैरी ContentProvider में

uri = Uri.parse("content://" + ContentProvider.AUTHORITY + "/elements/limit/" + 1); 

//In My case I want to sort and get the greatest value in an X column. So having the column sorted and limiting to 1 works. 
    Cursor query = resolver.query(uri, 
         new String[]{YOUR_COLUMNS}, 
         null, 
         null, 
         (X_COLUMN + " desc")); 
संबंधित मुद्दे