Тема: Робота з контактами
Добрий вечір. Пишу програму, у якій є потреба отримати усі контакти з телефонної книги і вивести їх в спінер для вибору користувачем. Наче все і працює за вийнятком дивного сортування контактів де спершу "І", а потім "А", але коли повернутись з activity на якій здійснюється вибір контакту на головну, а потім знову перейти на неї і так декілька разів туди-сюди - програма вилітає. Під час декількох змін орієнтування екрану теж вилітає. Якщо закоментувати метод, який працює з контактами - програма перестає вилітати. Підкажіть, будь ласка, як з цим боротися, а головне - чому це відбувається. Є підозри, що це через переповнення оперативної пам'яті.
Ось мій кострубатий метод:
public void getContacts() {
String phoneNumber = null;
Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;
String _ID = ContactsContract.Contacts._ID;
String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;
String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(CONTENT_URI, null,null, null, null);
ArrayList data = new ArrayList();
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String contact_id = cursor.getString(cursor.getColumnIndex( _ID ));
String name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME));
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {
Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null,
Phone_CONTACT_ID + " = ?", new String[] { contact_id }, null);
while (phoneCursor.moveToNext()) {
phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER));
data.add(name + " " + phoneNumber);
}
}
}
}
Set<String> set = new HashSet<>(data);
data.clear();
data.addAll(set);
Collections.sort(data);
ArrayAdapter<String> adapterS = new ArrayAdapter<String>(this, R.layout.spinner_item, R.id.spinner_text, data);
adapterS.setDropDownViewResource(R.layout.spinner_item);
mainSpinner.setAdapter(adapterS);
cursor.close();
}
Дякую за допомогу.