Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
#1

Получить номер телефона контакта по имени

11.04.2017, 14:50. Просмотров 837. Ответов 4
Метки нет (Все метки)

Здравствуйте, делаю контактную книжку (работа с системным файлом контактов). Необходимо по клику на контакт открыть новую активность, передать в неё имя контакта и по имени вытянуть нужную информацию на экран. Имя передаётся, но дальше всё ложится:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_contact_activity);
 
        Log.w("Начинаю работу", "");
 
        nameEText = (EditText) findViewById(R.id.cont_name);
        phoneEText = (EditText) findViewById(R.id.cont_phone);
        phoneEType = (Spinner) findViewById(R.id.cont_phone_type);
 
        String name = getIntent().getExtras().getString("contact_name");
 
        Log.w("Event log", "Данные взяты");
 
        Cursor c = getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI,
                new String[] {ContactsContract.Contacts._ID},
                ContactsContract.Contacts.DISPLAY_NAME + " = '" + name + "'", null, null);
        Log.w(LOG_TAG, "Запрос построен");
 
        if(c.getCount() > 0) {
                Log.w("Heil to the developer", "I've found this phone");
                while (c.moveToFirst()) {
                    String ID = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); //на этой строке выполнение кода прекращается 
                    if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                        Cursor pc = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{ID}, null);
                        Log.w(LOG_TAG, "Перехожу к номерам");
 
                        while (pc.moveToNext()) {
                            String nomer = pc.getString(pc.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            Log.e(LOG_TAG, nomer);
                        }
                        pc.close();
                    }
                }
 
                Log.w("Номер телефона", nomer);
 
                nameEText.setText(name);
                phoneEText.setText(nomer);
 
                c.close();
 
        } else {
            Log.w("Heil to the developer", "Phone doesn't exist");
        }
        c.close();
    }
И в логе пишет такую ошибку:
Java
1
04-11 14:47:14.144 28962-28962/com.diplom.modifikator.organizer E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 1 columns.
Как мне решить проблему?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2017, 14:50
Ответы с готовыми решениями:

Как набрать номер по имени контакта
Нужно набрать номер через Intent по имени контакта. Как это можно сделать? ...

Как получить свой номер телефона из веб риложения
Приветствую! Собственно задача следующая: нужно в веб приложении, запущенном в...

Выбор нужного номера телефона у контакта
Здравствуйте! Мне нужно сделать выбор нужного контакта и вывод его номера в...

Преобразование имени контакта в строку
Добрый день! С помощью примера из SDK извлек имена контактов. private Cursor...

Как получить данные контакта из Contact Provider
Подскажите как получить все данные из Contact Provider относящиеся к...

4
demixdn
308 / 254 / 78
Регистрация: 31.10.2016
Сообщений: 615
11.04.2017, 15:18 #2
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
ContactsContract.Contacts.CONTENT_URI
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
может из-за этого?
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
тоже самое
1
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
11.04.2017, 16:51  [ТС] #3
demixdn, а на что эти строки заменить?
0
petruchodd
11.04.2017, 17:57
  #4

Не по теме:

интересно

0
demixdn
308 / 254 / 78
Регистрация: 31.10.2016
Сообщений: 615
11.04.2017, 18:19 #5
Лучший ответ Сообщение было отмечено MODifikaTOR18 как решение

Решение

MODifikaTOR18, нашел проблему. проблема в том, что вы составляете запрос и указываете, что хотите получить только поле "new String[] {ContactsContract.Contacts._ID}", а после вытягиваете из этого ответа совершенное другое поле которое
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)
подставьте в вместо первого null и все пойдет как надо.
Вторая проблема, у вас бесконечный цикл:
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
while (c.moveToFirst())
Поставьте там if, и во втором случае if и все сработает один раз.
И научитесь пользоваться дебаггером.
1
11.04.2017, 18:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2017, 18:19

Серийный номер телефона
Подскажите, как получить серийный номер телефона (11-значный) в том виде, как...

Можно ли вытащить номер телефона?
Доброго всем времени суток дорогие Форумчане!!1 У меня к вам вопрос, можно...

Узнать программно номер телефона
Как узнать программно номер телефона android если номер пользовательского...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru