Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
dubok79
324 / 122 / 11
Регистрация: 01.11.2012
Сообщений: 586
#1

Контакты с гугл аккаунта - Программирование Android

06.02.2013, 16:55. Просмотров 1320. Ответов 17
Метки нет (Все метки)

Используя контент провайдер получаю список контактов у которых есть дни рождения. Этот список вывожу в виджет. Получаю 5, 10 строк не больше. На телефонах, где телефонная книжка большая, примерно 150-200 контактов программа подвисает или вообще вылетает с ошибкой. Проверить не могу, что бы отследить ошибку на моих телефонах все работает. Может на вскидку кто может указать вектор проблемы? От версии дроида не зависит и от можности телефона тоже, точно выявлено, что зависит от количества контактов.

Вот код получения списка:
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
private static void getDataFromContacts(Context context){
    ContentResolver contentResolver = context.getContentResolver();
    
    Uri uri = ContactsContract.Data.CONTENT_URI;
    String[] projection = new String[] {
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Event.CONTACT_ID,
        ContactsContract.CommonDataKinds.Event.START_DATE
    };
    String startdate = ContactsContract.CommonDataKinds.Event.START_DATE;
    String selection =
        ContactsContract.Data.MIMETYPE + "= ? AND " +
        ContactsContract.CommonDataKinds.Event.TYPE + "=" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
    String[] selectionArgs = new String[] {ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE};
    String sortOrder = String.format("(substr("+startdate+",6,2)  * 100+substr("+startdate+",9,2))+CASE WHEN (substr("+startdate+",6,2)  * 100+substr("+startdate+",9,2))>=(2*100+6) THEN 1 ELSE 2000 END LIMIT 5");
    
    final Cursor cursor = contentResolver.query(uri, projection, selection, selectionArgs, sortOrder); 
    
    while (cursor.moveToNext()) {
        String date = cursor.getString(2);
        String[] strdate = date.split("-");
        int ND = Integer.valueOf(strdate[2]);
        int NM = Integer.valueOf(strdate[1]);
        String comm = cursor.getString(0);
        setDataTmp(context, comm, ND, NM, false);//запись в базу данных SQLite
    }
    cursor.close();
}
вообще у меня сначала записываются данные в общую базу из разных источников. источников три. первые два имеют по 200-300 строк и отрабатываются на ура. Недавно добавил считывание контактов и вот такая засада.
В SortOrder идет сортировка данных упорядочивая даты которые больше 6 февраля (для примера) и результат ограничивается 5-ю строками. Промежуточную базу использую для сортировки данных из разных источников.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2013, 16:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Контакты с гугл аккаунта (Программирование Android):

2 гугл аккаунта на один admob - Программирование Android
Не заблокирует ли гугл за подобное? аккаунты не заблокированные, одна принадлежит компании другая личная

Проверка пароля от гугл-аккаунта или от телефона - Программирование Android
А нет ли в Андроиде такой волшебной функции, чтобы можно было спросить является ли "это" паролем от телефона или гугл аккаунта, или может...

Разметка (фон аккаунта) - Программирование Android
Как сделать черный прямоугольник на фона аккаунта как на скрине со "Стивом Джобсом")?

Регистрация аккаунта разработчика - Программирование Android
Здравствуйте! Обращаюсь ко всем кто регистрировал аккаунт разработчика. Скажите, пожалуйста, карта для оплаты нужна в долларах или...

Регистрация аккаунта разработчика - Программирование Android
Товарищи! Такой вопрос. Регистрирую аккаунт разработчика. Заполняю необходимые данные и вот этот проклятый гугл требует информацию о моем...

Читаются ли контакты с Viber - Программирование Android
Есть контент провайдер content://com.viber.provider.vibercontacts но ясно без пермишена не работает, есть ли пермишен в интернете или они...

17
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.02.2013, 21:10 #16
покажите код.

в том что вы здесь выставили вы не используете...
0
dubok79
324 / 122 / 11
Регистрация: 01.11.2012
Сообщений: 586
07.02.2013, 08:21  [ТС] #17
Цитата Сообщение от V0v1k Посмотреть сообщение
покажите код.
да я немного по другому делал, т.к. использовал db.execSQL
сейчас переделал на db.insert, конечно все работает, но все-таки по мне как программисту БД код работы с БД в андроиде очень запутанный и вовсе не читабельный. Будем привыкать. Спасибо за помощь.

Добавлено через 8 минут
Ну вот как то так сделал:
Java
1
2
3
4
5
6
ContentValues cv = new ContentValues();
cv.put("comment", comment);
cv.put("ND", ND);
cv.put("NM", NM);
try{db.insert(MeData.DB_TABLE_TMP, "comment,ND,NM", cv);}
catch(SQLException e){Log.e("ERROR-INS-DB",e.getMessage());}
кстати, нужно писать cv=null; или не обязательно?
0
dubok79
324 / 122 / 11
Регистрация: 01.11.2012
Сообщений: 586
25.10.2013, 09:26  [ТС] #18
В первом посте мною написан метод получения дней рождения контактов. Недавно заметил, что появилась галочка, которая позволяет при внесении дня рождения не указывать год рождения. Из-за этого у некоторых пользователей полезли ошибки, т.к. извлечение составляющих даты стало происходить не верно.
Java
1
2
String date = cursor.getString(2); //у меня приходит в формате YYYY-MM-DD
String[] strdate = date.split("-");//все удачно получалось
Теперь, если стоит галка "Не указывать год", опять же у меня формат даты получается такой --MM-DD
Я стал дату разбирать так:
Java
1
2
int ND=Integer.parseInt(date.substring(date.length()-2, date.length()));
int NM=Integer.parseInt(date.substring(date.length()-5, date.length()-3));
У меня все работает на ура. Но у других пользователей стали приходит ошибки. Например месяц у меня по номеру месяца минус 1 берет из массива наименование месяцев, но вдруг приходит ошибка, что мол длин массива 12, позиция -2 или 28, т.е. ерунда какая то.
Вопрос такой: как из даты рождения контактов ПРАВИЛЬНО взять ее составляющие.
СПАСИБО ЗАРАНЕЕ!
Я так полагаю, формат даты может быть разным, отсюда и ошибки.
0
25.10.2013, 09:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 09:26
Привет! Вот еще темы с ответами:

Как получить контакты? - Программирование Android
вот мой код package com.example.app; import android.app.ListActivity; import android.database.Cursor; import...

Регистрация аккаунта разработчика после блокировки - Программирование Android
В общем мне полгода назад прилетел бан. Доступа к панели разработчика нет. Подумываю на другого человека зарегать новый аккаунт. И тут...

Блокировка приложений и аккаунта в консоли разработчика - Программирование Android
Здравствуйте. Выпустил примерно полгода назад приложение справочник по онлайновой игрушке (Dota). Все замечательно, пользователи рады,...

Если контакты сохранены на сим карте,то не отображается - Программирование Android
Здравствуйте! Собственно по сабжу: как сделать, что бы приложение видело контакты и с сим карты? Заранее спс!


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

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

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