Sortera kontakter i rätt ordning abc ... åäö

Diskussion i 'Frågor, support och diskussion' startad av emolaus, 22 nov 2010.

  1. emolaus

    emolaus Infant Droid Medlem

    Blev medlem:
    22 nov 2010
    Inlägg:
    4
    Mottagna gillanden:
    0

    MINA ENHETER

    Hallå,

    jag gör en applikation som hämtar kontakter ur Androids Contacts DB och försöker få ut svenska namn i rätt ordning. Det blir dock, sorterat på förnamn, så här: A, Å, Ä, B, C... N, O, Ö, P, ...
    Appen SKA fungera på >10 språk så man blir ju orolig! Nån som har input till problemet?

    Här är koden:

    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);
     
  2. Reconnnn

    Reconnnn Professional Droid Hedersmedlem

    Blev medlem:
    9 mar 2010
    Inlägg:
    2 809
    Mottagna gillanden:
    263

    MINA ENHETER

    Varför ska du sortera i en så konstig ordning?

    Edit: Kanske ska ge lite vettig input också. Fungerar det inte att ha en array med alla första bokstäver typ {"a","å".......}? Då har du något att använda för din sortering.

    Edit 2: Oj som teodor sa så läste jag fel. Men min första edit kanske fortfarande hjälper dig.
     
    Last edited: 22 nov 2010
  3. teodor

    teodor Youth Droid Medlem

    Blev medlem:
    25 maj 2010
    Inlägg:
    130
    Mottagna gillanden:
    3

    MINA ENHETER

    Tror du läste fel... Som det ser ut nu blir sorteringen A, Å, Ä, B, C... N, O, Ö, P
    men han vill ha A-Ö där ÅÄÖ kommer sist som vi är vana med i Sverige.

    Har ingen erfarenhet av detta dock så jag kan tyvärr inte hjälpa dig =/
     
  4. emolaus

    emolaus Infant Droid Medlem

    Blev medlem:
    22 nov 2010
    Inlägg:
    4
    Mottagna gillanden:
    0

    MINA ENHETER

    @Reconnn: Aha, är det möjligt i sql att mata in en egen array med önskad ordning? Har du möjligtvis exempelkod?

    I det stora hela vill man ju hitta ett API som faktiskt kan göra det här automatiskt... Nu funderar vi på om det finns Java-klasser som kan sortera efter att vi hämtat cursorn.

    Edit: Utvärderar just nu denna: http://www.kodejava.org/examples/250.html
     
    Last edited: 22 nov 2010
  5. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Det står att COLLATE LOCALIZED använder sig att localized preferences. Frågan blir då vilken locale telefonen kör med? Om den är inställd på svenska borde det sorteras rätt i telefonen.

    Angående Java och sortering av strängar. I java finns klassen java.text.Collator, och den kan användas när man vill sortera "rätt" beroende på locale.
    http://download.oracle.com/javase/6/docs/api/java/text/Collator.html

    Det kan även hända att man in SqlLite kan skriva egna collators. Det går via C, men kan hända att det inte går via Java:
    http://www.sqlite.org/c3ref/create_collation.html
     
  6. emolaus

    emolaus Infant Droid Medlem

    Blev medlem:
    22 nov 2010
    Inlägg:
    4
    Mottagna gillanden:
    0

    MINA ENHETER

    Tjena, tack för svaret. Intressant att se att man kan skriva egna collators, det ska vi kolla på.

    Angående att sortera med java.text så funkar det visserligen med JavaSE-1.6, men samma kod i Android funkar INTE. Det är alltså en bug, om jag inte har fått nåt helt om bakfoten.

    Lade in det som en två issues i deras bug tracker... (Issue nr. 12698 + 12719)

    Edit: Obs att detta ändå verkar funka på många plattformar. Dessutom verkar det vara fixat i Gingerbread, se reviewerns kommentar på issue nr 12719.

    http://code.google.com/p/android/issues/detail?id=12719
     
    Last edited: 1 dec 2010