Страница 1 из 1
Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 13:51
Коваленко Павел
Моя БД состоит из двух таблиц. В процесе постройки List'a мне нужно взять имя из первой и n-ое количество номеров связаных с этим именем из второй.
Код: Выделить всё
if (cMyNewPeople !=null && cMyNewPeople.getCount()>0) {
cMyNewPeople.moveToFirst();
do {
nc.moveToFirst();
do {
numbers = nc.getString(0) + ": " + nc.getString(1) + "\n";
} while (nc.moveToNext());
Log.d("RingApp", "numbers = " + numbers);
list.add(new ContactItem(cMyNewPeople.getInt(0), cMyNewPeople.getString(1), "", numbers));
numbers = "";
} while (cMyNewPeople.moveToNext());
}
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 16:06
Foenix
все это вкорне неверно, так делать нельзя, нужно делать запрос в бд, объединяющий таблицы, для этого придуман язык sql. В java обработка двух курсоров занимает много ресурсов/времени.
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 18:06
Коваленко Павел
Foenix писал(а):все это вкорне неверно, так делать нельзя, нужно делать запрос в бд, объединяющий таблицы, для этого придуман язык sql. В java обработка двух курсоров занимает много ресурсов/времени.
я вас понял, но не могли бы вы мне подсказать, как быть в этой ситуации. Мне нужно, что бы из первой таблицы вернулась всего одна строка, а из второй массив строк связанный с ней по id.

Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 18:17
Foenix
на пальцах показать? вам к экстрасенсу.
структура таблиц, пример данных, пример того,что хотите получить.
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 18:52
Коваленко Павел
Foenix писал(а):на пальцах показать? вам к экстрасенсу.
структура таблиц, пример данных, пример того,что хотите получить.
вот структуры таблиц

заполнена id и именами
1 катя
2 маша
3 саша

1 1 (номер кати) (тип номера, мобильный)
2 1 (еще один номер кати) (тип номер, домашний)
3 2 (номер маши) (тип номера, рабочий)
4 3 (номер саши) (тип номера, мобильный)
В итоге нужно построить список из имен и номеров, к этим именам относящисмся.
например: маша рабочий 222-33-44
мобильный 333-44-55
домашний 444-55-66
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 19:07
Foenix
select name, number, type from Cell left outer join People on People.id=Cell.people_id order by name, type, number
\
Замечу, что лучше назвать поля не id, а _id и добавить в запрос это поле с таблицы Cell
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 19:24
Коваленко Павел
Foenix писал(а):select name, number, type from Cell left outer join People on People.id=Cell.people_id order by name, type, number
\
Замечу, что лучше назвать поля не id, а _id и добавить в запрос это поле с таблицы Cell
ваш запрос возвращает: имя, номер и тип номера.
т.е. в итоге мы видим: катя мобильный 111-22-33
____________________катя домашний 222-33-44
____________________катя рабочий 333-44-55

а хотелось бы:
КАТЯ: мобильный 111-22-33
____________ домашний 222-33-44
____________ рабочий 333-44-55

Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 19:52
Foenix
А это придется делать в адаптере, это как раз очень легко - просто скрывать вьюшку, проверив - какое значение было перед этим. Если то же самое - то View.INVISIBLE, если другое - то визибл
И это уже не относилось к первоначальному вопросу.
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 20:13
Коваленко Павел
Foenix писал(а):А это придется делать в адаптере, это как раз очень легко - просто скрывать вьюшку, проверив - какое значение было перед этим. Если то же самое - то View.INVISIBLE, если другое - то визибл
И это уже не относилось к первоначальному вопросу.
Да, я знаю, про свойство view.invisible, но, похоже, мы опять с вами не поняли друг друга. мой item.xml из которого я строю list состоит из двух TextView. в одном лежит имя в другом список контактных номеров. т.е скрыть возможно дублирующиеся имена и тогда будет виден лишь один контактный номер человека. возможно я не правильно сформулировал мой первоначальный вопрос, примите мои извинения. я предполагал, что в моем случае мне нужно две строки - одна, содержащая имя, вторая с списком телефонов через "\n".
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 21:33
Foenix
я все равно не поняла из этих объяснений ничего.
В одном имя , в другом номера - в чем проблема сделать имя невидимым?
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 22:17
Коваленко Павел
Foenix писал(а):я все равно не поняла из этих объяснений ничего.
В одном имя , в другом номера - в чем проблема сделать имя невидимым?
Строим список контактов с помощью ListView. в ListView помещается элемент item.xml. в нём у нас 2 TextView. один для отображения имени. второй для отображения контактных номеров. используя inner join на выходе получаем такую картинку
Если же скрыть имена, которые дублируются, то выходит, что у нас каждому человеку соответствует лишь один номер:
а хотелось бы получить вот такой результат:

Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 11 май 2015, 23:19
Foenix
я сказала все правильно.
Как же ты на втором рисунке скрыл имена, если они повторяются? смешно даже.
Надо скрыть 1 текствью ( утебя показан красным), с именем, получится то что нужно. Зачем все скрывать-то?
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 12 май 2015, 00:36
Коваленко Павел
Foenix писал(а):я сказала все правильно.
Как же ты на втором рисунке скрыл имена, если они повторяются? смешно даже.
Надо скрыть 1 текствью ( утебя показан красным), с именем, получится то что нужно. Зачем все скрывать-то?
Вот что тогда получится.

Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 12 май 2015, 00:45
Foenix
все правильно. Тебе остается правильно организовать вьюшку. Что именно не понятно?
Используй не INVISIBLE, а GONE и в дополнении программируй свои траурные рамочки как тебе надо.
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 12 май 2015, 08:32
Коваленко Павел
Foenix писал(а):все правильно. Тебе остается правильно организовать вьюшку. Что именно не понятно?
Используй не INVISIBLE, а GONE и в дополнении программируй свои траурные рамочки как тебе надо.
я не понимаю, что это даст? я скрываю имена при повторении, и тогда первый номер идет под именем, а остальные без но в
РАЗНЫХ элементах списка...
можешь накодить простенький пример реализации?
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 12 май 2015, 11:08
Foenix
все так как я сказала. Да, в разных элементах списка. Тебе для чего это надо-то? Начнем с этого.
Возможен еще запрос, более сложный, где номера могут быть в одной ячейке курсора строкой любого формата. Но так часто выводят лишь справочную информацию, которую потом никак обрабатывать не будут.

Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 12 май 2015, 12:04
Коваленко Павел
Я хочу написать приложение, которое будет отображать список контактов. Для этого я тяну данные из ContactsContract.
Код: Выделить всё
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
В цикле я получаю данные в виде пар: имя, номер. Имена контактов повторяются, при этом номера, которые соответсвуют имени, идут на выход по очереди. Т.е. если у меня в ContactsContract есть условная Катя, за которой значится несколько номеров, то на выходе я получу: Катя - мобильный номер, Катя - домашний номер, Катя - рабочий номер. Я хочу сгрупировать эти номера и вывести в свой ListView в виде одной ячейки списка. Например, Будет ячейка с первым TextView "Катя" и вторым, который будет содержать ее номера. Ваш предложеный вариант: поместить в первый элемент списка имя контакта с одним из номеров, а остальные положить в следующие мне не подходит т.к., я хочу в дальнейшем выполнять по нажатию на элемент списка некие действия, например, повесить на ячейку контекстное меню с возможностью выбора номера и осуществлению звонка на оный.
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 12 май 2015, 12:35
Foenix
тебе отвечать - потеря времени. Спросил за одно, продолжил за другое, теперь третье.
Запрос контактов - это совсем не те таблички, что ты представил ранее. ЭТо раз.
И объединять в одну ячейку телефоны, чтобы потом делать контекстное меню (которое уже устарело к слову) really?
Re: Возможно ли как-то работать с курсором внутри другого?
Добавлено: 12 май 2015, 12:47
Коваленко Павел
Closed