Урок 52. SimpleCursorAdapter, пример использования

Обсуждение уроков
Василь
Сообщения: 4
Зарегистрирован: 06 авг 2012, 23:29

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Василь » 31 окт 2012, 18:56

У меня есть задача

Создаю запись в БД и в таблицу вписываю в колонку значения EditText и в дургую колонку вписываю текстовое поле цвета

Пример
Message | Color
Day is Monday | red
Day I Wensday| green

С БД беру запись и вставляю в ListView в TextView запись Message

Но как мне для каждого TextView вставлять разный цвет.

использую

Код: Выделить всё

listMain = (LinearLayout) findViewById(R.id.listMain);

		dataBase = new DataBase(this);
		dataBase.open();
		cursor = dataBase.getAllData();
		startManagingCursor(cursor);
		listReminder = (ListView) findViewById(R.id.listReminder);
		String[] from = new String[] { DataBase.COLUMN_TEXT_REMINDER,
				DataBase.COLUMN_DATE, DataBase.COLUMN_TIME };
		int[] to = new int[] { R.id.strMassage, R.id.strData, R.id.strTime };
		cursorAdapter = new SimpleCursorAdapter(this, R.layout.listreminder,
				cursor, from, to);
		
		SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() {
			
			public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
				
					String color = cursor.getString(cursor
							.getColumnIndex(DataBase.COLUMN_COLOR));
					Log.d(TAG_LOG, "Color = "+color); // ЗДЕСЬ ПОЧЕМУТО МНОГО ЗАПИСЕЙ НО ЕСТЬ ТОЛЬКО ОДНА СТРОКА
				
				TextView strMassage = (TextView)view;
				 strMassage.setTextColor(color);
				 
				return true;
			}
		};
		cursorAdapter.setViewBinder(binder);
	listReminder.setAdapter(cursorAdapter);
Не могу понять с урока 50 как сделать что б заполнить

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение AndreyI » 01 ноя 2012, 04:48

Когда вы определяете свой ViewBinder и возвращаете true, то встроенный биндер уже не будет вызываться, адаптер поймет что вы связали данные из курсора (столбца int columnIndex) с view
В данном коде, вы установили цвет текста, а сам текст не установили, поэтому получите пустой ListView.
В вашем случае вы можете добавить
strMassage.setText(cursor.getString(columnIndex));
или просто возвращайте false, тогда следом за вашим биндером выполнится встроенный, который установит текст.

wasil5
Сообщения: 5
Зарегистрирован: 14 дек 2012, 17:44

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение wasil5 » 24 янв 2013, 10:30

В уроке в файле res/values/string.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">SimpleCursorAdapter</string>
<string name="add_record">Добавить запись</string>
<string name="delete_record">Удалить запись</string>
</resources>
без строчки :
<string name="menu_settings">Settings</string>
файл R.java не обновляется. Вроде нигде эта строчка не используется. Как вообще обновлять файл R.java и искать ошибки в проэкте непонятно. Неужели методом тыка. Помогите начинающему разобратся.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 24 янв 2013, 16:07

он сам обновляется, а если не обновляется, значит где-то ошибка. Обычно где-то среди xml файлов какая-нибуд опечатка вкралась
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

wasil5
Сообщения: 5
Зарегистрирован: 14 дек 2012, 17:44

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение wasil5 » 24 янв 2013, 17:48

дело оказалось именно в этой строчке в файле string.xml:
<string name="menu_settings">Settings</string>
без нее R.java не обновлялся , а где посмотреть причину в каком логе я не знаю.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 24 янв 2013, 22:21

значит где-то в программе есть ссылка на эту строку, однозначно.
Иногда помогает этот самый R в package explorer развернуть
и вообще поищите красненькие плюсики в package explorer, раз
и второе - посмотрите на console, там красным иной раз понаписано кое-что.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

wasil5
Сообщения: 5
Зарегистрирован: 14 дек 2012, 17:44

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение wasil5 » 25 янв 2013, 13:31

да спасибо нашел. Дело было в файле res/menu/main.xml:
...
android:title="@string/menu_settings"/>
...

zenit
Сообщения: 13
Зарегистрирован: 03 фев 2013, 22:59

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение zenit » 12 фев 2013, 11:53

В этом уроке почему то перечеркиваются черной линией при написании, когда вызываю методы:
...
startManagingCursor( cursor );
...
(Note: The method startManagingCursor(Cursor) from the type Activity is depricated )


...
scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);
...
(Note: The method SimpleCursorAdapter(Context, int, Cursor, String[], int[]) is depricated )

...
cursor.requery();
...
(Note: The method requery() from the type Cursor is depricated )



Подскажите пожалуйста как это обойти?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 12 фев 2013, 13:21

у SimpleCursorAdapter добавился еще один параметр layout
и у меня на requery не ругается..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

zenit
Сообщения: 13
Зарегистрирован: 03 фев 2013, 22:59

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение zenit » 12 фев 2013, 14:48

Как как тогда надо делать вызовы этих функций?

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение sae74 » 28 фев 2013, 15:29

Только пробую, так что наверно глупый вопрос....

SimpleCursorAdapter + SQLite + query

Если просто вывести содержимое таблицы в адаптер на экран - то все замечательно работает.
А вот если я делаю запрос к двум таблица, то в лог я вывожу результат, работает нормально.
Но как его вывести на экран через SimpleCursorAdapter

Вот кусок примера:
формирую запрос.

Код: Выделить всё

 String table = "Nakladnaya as NAKLADNAYA inner join JURNAL_NAKLADHYH as JURNAL on NAKLADNAYA._id = JURNAL._id";
 String columns[] = { "NAKLADNAYA.name as Name", "JURNAL.name as Klient", "_idNakladnaya as NomerDoc" };
 String selection = "NomerDoc = ?";
 String[] selectionArgs = {"2"};
 c = db.zapros(table, columns, selection, selectionArgs, null, null, null);
тут я выполняю сам запрос и возвращаю результат.

Код: Выделить всё

	public Cursor zapros(String table, String[] columns, String selection,
			String[] selectionArgs, Object object1, Object object2,
			Object object3) {
		Cursor resultat = mDB.query(table, columns, selection, selectionArgs, null, null, null);
		return resultat;
	}
тут должно все отработать. но на строке " scAdapter = new SimpleCursorAdapter(this, R.layout.shablonnakladnaya, c, data, to);" вылазит с ошибкой
Может я сопоставления не правильно делаю?

Код: Выделить всё

	startManagingCursor(c);

	    // формируем столбцы сопоставления
	   //String[] data = new String[] {DB.NAKLADNAYA_COLUMN_NAME, DB.JURNAL_NAKLADHYH_COLUMN_NAME , DB.NAKLADNAYA_COLUMN_ID_NAKLADNAYA };
	String[] data = new String[] {"Name", "Klient" , "NomerDoc" };
	   int[] to = new int[] { R.id.TxtTovar, R.id.TxtKolShtuk,  R.id.TxtSumma};
	
	    // создаем адаптер и настраиваем список
	   scAdapter = new SimpleCursorAdapter(this, R.layout.shablonnakladnaya, c, data, to);
	   gridNakladnaya = (GridView) findViewById(R.id.gridNakladnaya);
	   gridNakladnaya.setAdapter(scAdapter);
	adjustGridView();
Спасибо за ответы и подсказки!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 28 фев 2013, 15:40

С какой ошибкой-то....?
и у вас, вроде бы, в результате запроса нету колонки _id.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение sae74 » 28 фев 2013, 15:47

Вот на "нету колонки "_id" и ругается.
Но в лог, результат показывает.
Мне что, в запросе добавить поле "_id"?

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение sae74 » 28 фев 2013, 15:53

Изменил строку, добавил "_id"

Код: Выделить всё

 String columns[] = {"NAKLADNAYA._id as _id", "NAKLADNAYA.name as Name", "JURNAL.name as Klient", "_idNakladnaya as NomerDoc" };
Ошибка пропала, но на экран не выводит.
Нужна подсказка.....

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 28 фев 2013, 16:12

А какая была?
что значит не выводит? может быть у вас там данных нету.
Запрос странный inner join . Я сколько программирую мне он ни разу не пригодился, используется довольно редко, вам точно именно иннер нужен?

Вообще просто возьмите свою базу вытащите, запульните в любой сиквел-редактор и напишите запрос там. Что там выдаваться будет посмотрите. а так - все равно что вслепую.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение sae74 » 28 фев 2013, 16:16

Olivka писал(а):А какая была?
Была ошибка "java.lang.IllegalArgumentException: column '_id' does not exist"

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 28 фев 2013, 16:17

и что у вас за таблицы странные, у которых по id совпадают значения? там не id нужно делать, а ссылку из одной на другую.
У вас какой опыт в sql? Можно на скрипт создания таблиц посмотреть?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 28 фев 2013, 16:17

sae74 писал(а):
Olivka писал(а):А какая была?
Была ошибка "java.lang.IllegalArgumentException: column '_id' does not exist"
ну? так и надо было его сразу добавить.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 28 фев 2013, 16:18

Теперь могу поспорить у вас запрос неправильный и данных там нету в результате.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение sae74 » 28 фев 2013, 16:28

База не пустая, заполнил в сиквел-редакторе.
Сам запрос работает отлично.
Я не могу вывести результат запроса на экран.
В лог он выводится так как нужно.

Опыт работы с sql маленький.

Повторюсь: вывести на экран через SimpleCursorAdapter всю таблицу у меня получается. Все сделал на основании "Урок 52. SimpleCursorAdapte"

Но не могу вывести результат запроса через SimpleCursorAdapter на экран, объединение двух таблиц в одну. А в лог он выводится так как нужно.

Вот что мне выводится в лог : "02-28 13:24:55.652: D/myLogs(6369): _id = 2; Name = Продукт №2; Klient = Антипова Лариса ЧП--Ф2; NomerDoc = 2;"

Думаю, что тут я не правильно указываю имена столбцов для сопоставления.

Код: Выделить всё

String[] data = new String[] {"Name", "Klient" , "NomerDoc" };
А на основании урока, что бы вывести всю таблицу я использую

Код: Выделить всё

String[] data = new String[] {DB.NAKLADNAYA_COLUMN_NAME, DB.NAKLADNAYA_COLUMN_KOLSHTUK,  DB.NAKLADNAYA_COLUMN_SUMMA };
Так вот, DB.Name я использовать не могу. А как?

Ответить