2014-10-18 2 views
1
public void ReadContacts() { 
    Cursor people = getContentResolver().query(Phone.CONTENT_URI, null, null, null,Phone.DISPLAY_NAME + " ASC "); 
    int indexName = people 
      .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 
    int indexNumber = people 
      .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 

    people.moveToFirst(); 
    do { 
     name = people.getString(indexName); 
     number = people.getString(indexNumber); 

     contacts.put(name, number); 

    } while (people.moveToNext()); 

    printHashMap(contacts); 

} 

public void printHashMap(HashMap<String, String> a) { 

    for (Entry<String, String> lists : a.entrySet()) { 
     Log.d(lists.getKey(), lists.getValue()); 
    } 

} 

Контакты не сортируются во время использования ASC? вы можете помочь мне с причиной? я использовал метод верхней() также иСортировка контактов в Android

Курсор текущ = cr.query (ContactsContract.Contacts.CONTENT_URI, NULL, NULL, NULL, "верхний (" + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + "), АСК");

ответ

0

Вы поместите свои (отсортированные) результаты в HashMap, который не сохраняет порядок элементов. Используйте Список, и он будет работать.

Edit: Использование Tuple класса Вы предлагаете в своем комментарии, он должен выглядеть следующим образом:

static class Tuple { 
    public String name; 
    public String number; 

    public Tuple(String name, String number) { 
     this.name = name; 
     this.number = number; 
    } 
} 

public void ReadContacts() { 
    Cursor people = getContentResolver().query(Phone.CONTENT_URI, null, null, null, Phone.DISPLAY_NAME + " ASC "); 
    int indexName = people 
      .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 
    int indexNumber = people 
      .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 

    List<Tuple> contacts = new ArrayList<Tuple>(); 

    people.moveToFirst(); 
    do { 
     name = people.getString(indexName); 
     number = people.getString(indexNumber); 

     contacts.add(new Tuple(name, number)); 

    } while (people.moveToNext()); 

    printHashMap(contacts); 

} 

public void printList(List<Tuple> list) { 

    for (Tuple tuple : list) { 
     Log.d(tuple.name + ", " + tuple.number); 
    } 
} 

Но я рекомендую переименовать Tuple класс к Contact в этом случае. Наличие класса кортежа с членами с именем 'name' и 'number' является нечетным.

+0

спасибо. Я должен использовать ArrayList вместо этого? –

+0

нет такой вещи, как ArrayList ? –

+0

плохо использовать два разных списка массивов? –

Смежные вопросы