2010-11-22 44 views
4

Voici mon problème: J'écris une application de contacts alternative qui est spécifiée pour fonctionner avec BEAUCOUP de langues et d'alphabets. Lors de l'interrogation de noms dans ma propre langue, le suédois, les noms utilisant des caractères trémas sont triés de façon illogique pour moi, mais logique à unicode je suppose:Contacts Android: classement/tri localisé incorrect

Devrait être/Style suédois: A, B, C, ... , Z, Å, Ä, Ö.

résultat de la requête: A, A, A, B, ..., N, O, O, P, ...

Je suppose que ce sera un problème dans toute langue qui diffère de l'alphabet latin . Tous les tests que j'ai faits sont sur l'émulateur. Mon groupe de développeurs apporte des modifications au cadre afin que les réponses de bas niveau soient les bienvenues.

Uri uri = ContactsContract.Contacts.CONTENT_URI; 
String[] projection = new String[] { 
     ContactsContract.Contacts._ID, 
     ContactsContract.Contacts.DISPLAY_NAME, 
     ContactsContract.Contacts.PHOTO_ID 
     }; 
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'"; 
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
mCursor = managedQuery(uri, projection, null, null, sortOrder); 

Mise à jour: Nous étudions actuellement cette piste: Sort a String array, à confirmer ... Je également ajouté comme une question sur Google Code.

+1

Essayez d'utiliser SQLiteDatabase.setLocale – Mikpa

+1

Bien la base de données est gérée par le système Android, et setLocale (Locale l) n'est pas une fonction statique. Pendant que j'interprète le doc (2.2) le collator LOCALIZED est supposé être capable de gérer ce tri - mais ils n'ont pas de documentation dessus (le doc dit, XXX un lien est nécessaire!: P) – emolaus

Répondre

1

Gaah. Il semble qu'il est comme ceci:

exécutant le code suivant en Java vanille (SE-1.6) génère la sortie désirée:

String strings[] = {"Åke", "Äskil", "Otto", "Adam", "Örjan", "Palle", "Nisse"}; 
Locale locale = new Locale("sv", "SE"); 
Collator collator = java.text.Collator.getInstance(locale); 
java.util.Arrays.sort(strings, collator); 

Mais le même code dans Android ne fonctionne pas pour moi.

Modifier: J'ai fait un issue sur le site Android Code Google, il a été commenté par un critique. Êtes-vous sûr que le périphérique possède les paramètres régionaux corrects?