2012-05-14 12 views
9

मैं अपने कर्सर लोडर के लिए GROUP BY क्वेरी कैसे परिभाषित करूं?CursorLoader के साथ ग्रुप बाय

एक CursorLoader मैं ले देखने के लिए दो कंस्ट्रक्टर्स या तो एक एकल Context या एक Context, Uri, projection, selection, selectionArgs और sortOrder

लेकिन groupBy नहीं।

उत्तर

24

नहीं वास्तव में ...

आप BY खंड अपने विशिष्ट समूह में एक विशिष्ट यूआरआई परिभाषित कर सकते हैं।

उदाहरण के लिए, यदि आप एक मेज mPersonTable, संभवतः लिंग के आधार पर वर्गीकृत किया है, तो आपको निम्न यूआरआई परिभाषित कर सकते हैं:

PERSON 
PERSON/# 
PERSON/GENDER 

जब क्वेरी करने, आपके प्रश्नों के बीच स्विच ताकि आप अपने समूह पैरामीटर जोड़ सकते हैं:

public Cursor query(Uri uri, String[] projection, String selection, 
      String[] selectionArgs, String sortOrder) { 
    String groupBy = null; 
    switch (mUriMatcher.match(uri)) { 
     case PERSON_ID: 
     ... 
     break; 
     case PERSON_GENDER: 
     groupBy = GENDER_COLUMN; 
     case PERSON: 
     SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
     builder.setTables(mPersonTable); 
     builder.setProjectionMap(mProjectionMap); 
     return builder.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder, limit); 
     default: 
     break; 
    } 
} 

वास्तव में, आप मापदंडों के किसी भी प्रकार आपकी क्वेरी

Obs करने .: अपनी क्वेरी कार्यान्वयन के साथ uri मैच के लिए एक UriMatcher का उपयोग दे सकते हैं।

+1

यह वास्तव में एक महान काम के आसपास, है के साथ द्वारा समूह जोड़ सकते हैं! धन्यवाद! – dbm

+0

हाँ, ज़ाहिर है! आपका स्वागत है। – JPMagalhaes

+0

@JPMagalhaes: कृपया मेरी मदद करें। मैं वही काम कर रहा हूं लेकिन यह लागू नहीं कर रहा हूं कि इसे कैसे कार्यान्वित किया जाए। क्या आप इसे बदलने के तरीके पर कुछ और कोड डाल सकते हैं। –

2

जाहिर है (मैं एक Android 2.3 उपकरण के लिए सहायता पैकेज का उपयोग कर रहा) (और यह थोड़ा शर्मनाक है) documentation में बहुत पहले लाइन स्पष्ट रूप से कहा गया है कि CursorLoader प्रश्नों ContentResolverCursor पुनः प्राप्त करने के । जबकि ContentResolverGROUP BY पर किसी भी माध्यम का खुलासा नहीं करता है, इसलिए, CursorLoader इस तरह की कार्यक्षमता का खुलासा नहीं कर सकता है।

तो मेरे अपने प्रश्न का स्पष्ट उत्तर यह है: आप नहीं कर सकते!

6

आप eventhough यह यह समर्थन करने के लिए सामग्री प्रदाता की आवश्यकता है चयन पैरामीटर

new CursorLoader(context,URI, 
         projection, 
           selection+") GROUP BY (coloum_name", 
         null,null); 
+3

मैं इसे उपयोगी के रूप में चिह्नित कर रहा हूं क्योंकि यह एकमात्र ऐसा उत्तर है जो मौजूदा सामग्री प्रदाताओं के साथ काम करता है (आप समूह के लिए यूरी नहीं जोड़ सकते हैं) लेकिन यह थोड़ा डरावना है कि यह काम करता है। –

संबंधित मुद्दे