2016-02-15 1 views
0

je trouve cette fonction dans développeur android web offficialrequête personnalisée curseur pour obtenir des données de contenu: // sms/envoyé

public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal)

Maintenant, je veux obtenir sms à partir du contenu: // sms/envoyé , avec thread_id de sms je vais obtenir seulement sms plus récent.

Je vais vous expliquer par exemple:

id | thread_id |  phone  |  body 

10  47 
9  46 
8  47 
7  45 
6  47 
5  43 
4  45 
3  42 
2  41 
1  47 

Pour un résultat que je souhaite recevoir est:

id | thread_id |  phone  |  body 

10  47 
9  46  
7  45 
5  43 
3  42 
2  41 

Comment dois-je faire avec requête ci-dessus? Merci.

+0

lecture sur les '' max' et groupe by' dans sql (ITE) – pskink

+0

@pskink mais semble fonction Curseur requête ci-dessus ne pas utiliser pour Uri? Et vous pouvez me donner un petit exemple est très utile car je recherche aussi plus mais peut réussir, et merci pour votre commentaire. – Hoang

+0

ah désolé, il est tiré de 'ContentResolver # query' ... donc non, vous ne pouvez pas utiliser' group by', vous devez parcourir le 'Cursor' et trouver le maximum' id' dans une boucle – pskink

Répondre

0

Vous devez utiliser GROUP BY thread_id, voir plus de détails dans mon dépôt GitHub SmsMessenger, vous pouvez l'obtenir en suivant la requête:

Cursor cursor = MyApplication.getContext().getContentResolver().query(Uri.parse("content://sms") 
      , null 
      , "address IS NOT NULL) GROUP BY (thread_id" 
      , null 
      , null); 
    if (cursor != null && cursor.moveToFirst()) { // must check the result to prevent exception 
     do { 
    String messageText = cursor.getString(cursor.getColumnIndexOrThrow("body")); 
    System.out.println("messageText : "+messageText); 
} while (cursor.moveToNext());