Урок 136. CursorLoader

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 21 янв 2014, 16:46

plika писал(а):
Foenix писал(а):можно курсор использовать как угодно...
подозревал, что должно быть так :)
Foenix писал(а):ТАм есть метод (точно не помню) посмотри по-моему getCursor()
Не нашел.. :( А чей это метод? Где копать?
PS Нашел :) у адаптера
Спасибо
если вообще адаптер и листвью не нужен, лучше использовать другой лоадер, например
https://developer.android.com/training/ ... oader.html
CursorLoader
R.id.team

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

plika
Сообщения: 5
Зарегистрирован: 21 янв 2014, 14:38

Re: Урок 136. CursorLoader

Сообщение plika » 21 янв 2014, 21:23

Foenix писал(а):
plika писал(а):
Foenix писал(а):можно курсор использовать как угодно...
подозревал, что должно быть так :)
Foenix писал(а):ТАм есть метод (точно не помню) посмотри по-моему getCursor()
Не нашел.. :( А чей это метод? Где копать?
PS Нашел :) у адаптера
Спасибо
если вообще адаптер и листвью не нужен, лучше использовать другой лоадер, например
https://developer.android.com/training/ ... oader.html
CursorLoader
Сорри, но не понял. По ссылке пример CursorLoader'а с адаптером. И не показано как можно обратиться к курсору с данными.
Я хочу при старте загрузить данные из SQLite в массив и далее ListView привязать к нему, т.е. адаптер для работы с запросом мне не нужен. Все что пока смог придумать - заполнять массив в onLoadFinished. Это будет идеологически правильно?

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 21 янв 2014, 21:59

Причем тут адаптер? в onLoadFinish получаешь курсор и делай с ним что хочешь!
R.id.team

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

GuryevAV
Сообщения: 3
Зарегистрирован: 13 янв 2014, 15:04

Re: Урок 136. CursorLoader

Сообщение GuryevAV » 21 янв 2014, 22:03

KamiSempai писал(а):
GuryevAV писал(а):Оба метода вызывают ошибку:
Ошибку вызывает MainActivity в onOptionsItemSelected. В 137 строке обращение к null.
KamiSempai спасибо за наводку. В onOptionsItemSelected адаптер был пустым. Сначала надо было сделать:

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

sctAdapter = (SimpleCursorTreeAdapter)this.elvMain.getExpandableListAdapter();
А потом уже:

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

c1 = db.SortShopData();
sctAdapter.setGroupCursor(c1);
Целый месяц над этим думал :)

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 21 янв 2014, 22:11

:-D
R.id.team

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

Zeban
Сообщения: 26
Зарегистрирован: 30 окт 2013, 06:46
Откуда: Благовещенск

Re: Урок 136. CursorLoader

Сообщение Zeban » 12 фев 2014, 18:01

Подскажите как подключить кнопку к list item? Есть список, пользователь выбирает элемент и добавляет его в корзину нажатием на кнопку. Я так понимаю, должен быть принцип такой же как и в OnItemClickListener?

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




public class XGarDesActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {

  ListView lvData;
  DataBaseHelper db;
  SimpleCursorAdapter scAdapter;
  Cursor cursor;

  /** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu_gar_des);


    // открываем подключение к БД
	db = new DataBaseHelper(this);
    db.openDataBase();
    
    
 // формируем столбцы сопоставления
    String[] from = new String[]  { DataBaseHelper.COLUMN_MENU_IMG, DataBaseHelper.COLUMN_MENU_NAME, DataBaseHelper.COLUMN_MENU_KOL, DataBaseHelper.COLUMN_MENU_SELL};
    int[] to = new int[] { R.id.ivImg, R.id.text_hot, R.id.tvKol, R.id.tvSell};
    
    // создаем адаптер и настраиваем список
    scAdapter = new SimpleCursorAdapter(this, R.layout.menu_list_item, cursor , from, to, 0);
    lvData = (ListView) findViewById(R.id.lvData_gar_des);
    lvData.setAdapter(scAdapter);
    
    // создаем лоадер для чтения данных
    getSupportLoaderManager().initLoader(0, null, this);
  }
  

  protected void onDestroy() {
    super.onDestroy();
    // закрываем подключение при выходе
    db.close();
  }

  @Override
  public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
    return new MyCursorLoader(this, db);
  }

  @Override
  public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    scAdapter.swapCursor(cursor);
  }

  @Override
  public void onLoaderReset(Loader<Cursor> loader) {
  }
  
  static class MyCursorLoader extends CursorLoader {

	  DataBaseHelper db;
    
    public MyCursorLoader(Context context, DataBaseHelper db) {
      super(context);
      this.db = db;
    }
    
    @Override
    public Cursor loadInBackground() {
      Cursor cursor = db.getGarDesData();
      return cursor;
    }
  }
}

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 12 фев 2014, 19:10

буквально недавно был такой вопрос на форуме
R.id.team

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

volboy
Сообщения: 39
Зарегистрирован: 11 ноя 2013, 17:08

Re: Урок 136. CursorLoader

Сообщение volboy » 20 фев 2014, 19:59

Ребятушки я так понимаю наследник класса CursorLoader должен быть типа static. Так ведь? А если возникает необходимость передать какую-нибудь переменную как быть? К слову я хотел к этому уроку поиск/сортировку прикрутить, но наткнулся на вышеизложенную проблему. Подозреваю, что мне помогут public String[] getProjection (), public String getSelection () но они требуют static.
Последний раз редактировалось volboy 20 фев 2014, 20:17, всего редактировалось 1 раз.

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 20 фев 2014, 20:12

поиск или фильтрацию списка? это разные паттерны
R.id.team

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

volboy
Сообщения: 39
Зарегистрирован: 11 ноя 2013, 17:08

Re: Урок 136. CursorLoader

Сообщение volboy » 20 фев 2014, 20:21

Foenix писал(а):поиск или фильтрацию списка? это разные паттерны
Ну тогда фильтрация, вообщем то, что было описано в уроке 36, я хотел сделать здесь, а вот про поиск я что-то не встретил упоминания в уроках

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 20 фев 2014, 20:50

столько слов, а ответ не ясен. программисты, говорите..
R.id.team

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

volboy
Сообщения: 39
Зарегистрирован: 11 ноя 2013, 17:08

Re: Урок 136. CursorLoader

Сообщение volboy » 20 фев 2014, 20:56

Foenix писал(а):столько слов, а ответ не ясен. программисты, говорите..
Думаю с кодом будет лучше

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

 @Override
    public Cursor loadInBackground() {
      Cursor cursor;
      cursor = db.getAllData(selection, selectionArgs); // тут как раз таки и ошибка
      try {
        TimeUnit.SECONDS.sleep(1);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      return cursor;
    
    }
А эти переменные нужны нам для этого

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

public Cursor getAllData(String selection, String[] selectionArgs ) {
	
    return mDB.query(DB_TABLE, null, selection, selectionArgs, null, null, null);
  }

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 20 фев 2014, 21:04

ты хочешь сделать поиск или фильтр?
напиши в ответ 1 слово
ПОясню. Поиск - это когда курсор в списке перемещается на ту строку, которая соответствует вводимому пользователем символу (слову)
Фильтр - это когда в списке выбираются динамически только те записи, которые соответствуют вводимому пользователем слову (символам).
А в коде что угодно можно написать.
R.id.team

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

volboy
Сообщения: 39
Зарегистрирован: 11 ноя 2013, 17:08

Re: Урок 136. CursorLoader

Сообщение volboy » 21 фев 2014, 08:57

Поиск

volboy
Сообщения: 39
Зарегистрирован: 11 ноя 2013, 17:08

Re: Урок 136. CursorLoader

Сообщение volboy » 21 фев 2014, 08:58

И как сделать поле таблицы уникальным

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 21 фев 2014, 09:40

volboy писал(а):Поиск
поиск?? так зачем же тебе лоадер трогать? тебе надо использовать адаптер и список двигать - запрос от этого не изменяется.
R.id.team

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

volboy
Сообщения: 39
Зарегистрирован: 11 ноя 2013, 17:08

Re: Урок 136. CursorLoader

Сообщение volboy » 21 фев 2014, 20:58

Foenix писал(а):
volboy писал(а):Поиск
поиск?? так зачем же тебе лоадер трогать? тебе надо использовать адаптер и список двигать - запрос от этого не изменяется.
В цикле сравнивать введенное значение с записями в адаптере, при совпадении устанавливать курсор на найденную запись?

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

Re: Урок 136. CursorLoader

Сообщение Foenix » 21 фев 2014, 21:35

http://stackoverflow.com/questions/2063 ... m-edittext
вообще несколько способов
только насколько он подходит.. не знаю.. имхо искать так можно только если список отсортирован
Есть еще быстрый поиск, поиск с выводом букв алфавита..
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: Урок 136. CursorLoader

Сообщение Foenix » 21 фев 2014, 21:38

volboy писал(а):И как сделать поле таблицы уникальным
ну это уж сам неужели не сообразишь как?
R.id.team

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

volboy
Сообщения: 39
Зарегистрирован: 11 ноя 2013, 17:08

Re: Урок 136. CursorLoader

Сообщение volboy » 27 фев 2014, 18:21

Foenix писал(а):http://stackoverflow.com/questions/2063 ... m-edittext
вообще несколько способов
только насколько он подходит.. не знаю.. имхо искать так можно только если список отсортирован
Есть еще быстрый поиск, поиск с выводом букв алфавита..
Что не получается все равно, перерыл немного тем нашел интересное слово фильтр, и понял это то что нужно. Однако есть разные примеры, но не один я не смог адаптировать именно для данного урока. Наткнулся вот на такую тему
http://stackoverflow.com/questions/1299 ... rsorloader, попробывал переделать так: здесь берем значение фильтра

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

name.addTextChangedListener(new TextWatcher() {

       public void onTextChanged(CharSequence s, int start, int before, int count) {
    	   findname=(name.getText().toString());
         

       }

       public void beforeTextChanged(CharSequence s, int start, int count,
               int after) {


       }

       public void afterTextChanged(Editable s) {
           

       }
   });
здесь собственно лоудер

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

 public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
	  String selection = DB.COLUMN_TXT + "=?";
	  String[] selectionArgs={findname};
	  
	  CursorLoader cl=new MyCursorLoader(this, db , null,selection, selectionArgs,null);
	  return cl;
  }
Так не работает, ошибок нет, просто не реагирует на изменение edittext. Наверно потому, что метод OncreateLoader вызывается в начале и больше нет, ведь так. Надо как то рефрешить лоадер, а как? подскажите.
Так же пробывал метод getFilter для адаптера, он тоже не работает, сказали что будет работать с BaseAdapter , но надо все переделывать, такой гемор мне кажется, что думаете народ)? Ответ учи мат. часть заранее принимается, но хочется услышать другой ответ)

Ответить