Урок 136. CursorLoader

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 14 май 2014, 19:24

та не, про параметр я загнула)
проверяй курсор что в нем
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 14 май 2014, 19:25

Полностью таблица:
[syntax=java]static final String DATA_TOOL_PLASMA = "dataplasma";
//Поля
static final String PLASMA_ID = "plasma_id";
static final String PARAM_NUM = "param_num";
static final String PLASMA_THICKNES = "thickness";
static final String STEEL_GRADE = "steel_grade";
static final String FILE_NAME_PLASMA = "file_name_plasma";
static final String PARAMETR_NAME_PLASMA = "parameter_name_plasma";
static final String STRAIGHT_CUT = "straight_cut";
static final String OBLIQUE_CUT_TOP = "oblique_cut_top";
static final String OBLIQUE_CUT_LOWER = "oblique_cut_lower";
static final String MARKING = "marcing";
static final String PUNCHING = "punching";
static final String QUALITY_HOLE = "quality_hole";
//Скрипт создания таблицы
static final String DBP_CREATE = "create table " + DATA_TOOL_PLASMA + "("
+ PLASMA_ID + " integer primary key autoincrement, "
+ PARAM_NUM + " integer,"
+ PLASMA_THICKNES + " integer,"
+ STEEL_GRADE + " string,"
+ FILE_NAME_PLASMA + " string,"
+ PARAMETR_NAME_PLASMA + " string,"
+ STRAIGHT_CUT + " string,"
+ OBLIQUE_CUT_TOP + " string,"
+ OBLIQUE_CUT_LOWER + " string,"
+ MARKING + " string,"
+ PUNCHING + " string,"
+ QUALITY_HOLE + " string"
+ ");";[/syntax]

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 14 май 2014, 19:42

что ж у тебя одинаковые константы два раза описаны? мало ли, может буква не такая
Возьми просто опиши их в отдельном классе и реализуй интерфейс в обоих случаях.
обычно классы таблиц где только константы делают интерфейсами.
Еще реализацию провайдера давай. Просто таблица ни о чем не говорит.
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 14 май 2014, 19:45

В общем вставил для проверки:
[syntax=java]public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
switch (loader.getId()) {
case 0:
String b = cursor.getString(cursor.getColumnIndex(PARAMETR_NAME_PLASMA));
System.out.println(b);
adapter.swapCursor(cursor);
break;
case 1:
adapter.swapCursor(cursor);
break;

default:
break;
}
}[/syntax]
сейчас пишет мол вне границ:
05-14 16:36:04.722: E/AndroidRuntime(3093): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 4
05-14 16:36:04.722: E/AndroidRuntime(3093): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
05-14 16:36:04.722: E/AndroidRuntime(3093): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
05-14 16:36:04.722: E/AndroidRuntime(3093): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
05-14 16:36:04.722: E/AndroidRuntime(3093): at android.database.CursorWrapper.getString(CursorWrapper.java:114)

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 14 май 2014, 19:47

Не мамуль тут точно не в КП проблема, так как из других классов запрос проходит нормально и данные приходят

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 14 май 2014, 19:48

конечно, т.к. нету такой колонки выдается ее номер как -1, соответственно в курсоре нету колонки с номером -1
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 14 май 2014, 19:54

Есть

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 14 май 2014, 20:19

что то я не пойму пришел курсор со второго uri(static final Uri URI_DATA = Uri.parse("content://ru.htsprovider.htspdata/datatable");) это как так?

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 14 май 2014, 20:30

Другая таблица пришла потому что твой вебинар не внимательно послушал. ID должен быть уникален а у меня в другом фрагменте уже такой инициализирован. Сейчас с другой портянкой маюсь(((

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 20 май 2014, 17:49

Доброго времени суток)))
Как получить фильтр (selection) в cursorloader? Имею ввиду вставить её динамически при инициализированном загрузчике.

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 20 май 2014, 18:21

еще раз, и помедленее)
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 20 май 2014, 18:28

Получаю из одного фрагмента значение выбранного элемента и отправляю его во второй фрагмент

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

@Override
    public void onListItemClick(ListView l, View v, int position, long id) {
		 super.onListItemClick(l, v, position, id);
		 
		 Launcher fragmentLauncher = (Launcher) getFragmentManager().findFragmentById(R.id.frag_launcher);
		 
		 String field1 = adapter.getCursor().getString(1);
		 fragmentLauncher.setStrParam(field1);
		    Toast.makeText(getActivity(), "position = " + position + " " + field1, Toast.LENGTH_SHORT).show();
	}
Во втором фрагменте получаю значение:

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

public void setStrParam(String name){
		item_name = name;
		System.out.println(item_name);
	}
а теперь пытаюсь засунуть в выборку

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

String from_name = DATA_NAME + "=" + item_name;
from_name это то что должно попасть в selection, и соответственно изменить данные во втором фрагменте

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 20 май 2014, 19:00

тут просто можно сделать лоадеру рестарт, предварительно записав в некоторое свойство класса данное значение, а при получении курсорлоадера учитывать это свойство класса (вначале допустим оно будет "1=1" или пустое)
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 20 май 2014, 19:04

Вот вот, я так и начал делать только как рестартануть лоадер?

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 20 май 2014, 19:11

Gorets писал(а): getActivity().getSupportLoaderManager().restartLoader(0, null, this);
я думала, на такой простой вопрос ты сам найдешь ответ. Пришлось за тебя в теме целых две страницы просмотреть.
R.id.team

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 20 май 2014, 19:12

Упс))))

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Урок 136. CursorLoader

Сообщение alexmx » 20 май 2014, 19:14

Надо было мне в ссылку носом ткнуть))) Сяпочки тебе родная

belant
Сообщения: 5
Зарегистрирован: 02 июн 2014, 10:14

Re: Урок 136. CursorLoader

Сообщение belant » 02 июн 2014, 10:32

В уроке есть проблема. При повороте экрана во время работы loadInBackground будет вылетать исключение, т.к. лоадер восстановит объект BD, а база уже закрыта в onDestroy. Пока при сохранении состояния сохраняю признак выполняется ли loadInBackground, а при загрузке перезапускаю запрос, что не есть гуд. Кто знает как обойти эту проблему?

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: Урок 136. CursorLoader

Сообщение Viewer » 02 июн 2014, 11:16

belant писал(а):В уроке есть проблема. При повороте экрана во время работы loadInBackground будет вылетать исключение, т.к. лоадер восстановит объект BD, а база уже закрыта в onDestroy. Пока при сохранении состояния сохраняю признак выполняется ли loadInBackground, а при загрузке перезапускаю запрос, что не есть гуд. Кто знает как обойти эту проблему?
Есть стандартное решение - SQLiteOpenHelper (на сайте во всех уроках работа с БД построена через него) и все вопросы отпадут. При правильном использовании SQLiteOpenHelper берет на себя не только функции создания/обновления БД, но и все диспетчерские функции работы с БД - когда нужно сам открывает или закрывает подключения к БД, вам не нужно будет забивать этим голову.
Вам нужно только забыть про прямые обращения к БД, в частности, не нужно непосредственно открывать и закрывать подключения к БД (через методы контекста), а только через методы SQLiteOpenHelper

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 02 июн 2014, 11:43

Viewer, что-то ты путаешь)
R.id.team

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

Ответить