Страницы

Поиск по вопросам

вторник, 7 апреля 2020 г.

cursor.requery is deprecated что теперь делать?

#java #android #sqlite

                    
После удалении из БД данных надо обновить ListView чтобы отображать изменении. Но
Студия говорит что requery() is deprecated . Какую функцию можно использовать вместе
него? Вот здесь говорят что надо повторно вызвать курсор. Но я не понял как это надо
делать. 

UPD: Скопировал первый код и заново вызвал курсор этим кодом не помогло. 

cursor =  mSqLiteDatabase.rawQuery("select * from "+ DatabaseHelper.DATABASE_TABLE,
null);

    


Ответы

Ответ 1



Решил проблему таким образом. Сначала повторно вызвал курсор тем кодом которым он был создан. cursor = mSqLiteDatabase.rawQuery("select * from "+ DatabaseHelper.DATABASE_TABLE, null); Потом использовал функции SimpleCursorAdapter : userAdapter.swapCursor(cursor); userAdapter.notifyDataSetChanged(); Работает как надо. Первым делом вызываем курсор снова потом используем вышеперечисленные методы. Всё вместе выглядит так: cursor = mSqLiteDatabase.rawQuery("select * from "+ DatabaseHelper.DATABASE_TABLE, null); userAdapter.swapCursor(cursor); userAdapter.notifyDataSetChanged(); PS1. В решении проблемы помогла вот это PS2. Если у вас нет SimpleCursorAdapter надо его создать чем то похожим на вот это: userAdapter = new SimpleCursorAdapter(this, R.layout.siyahi_obyekti, cursor, headers, new int[]{R.id.textView5, R.id.textView6,R.id.textView7}, 0); siyahi.setAdapter(userAdapter);

Ответ 2



Вы не поняли главной цели Гугла (Андроида) по изменению политики к курсорам. Идея состоит в том, чтобы вывести процесс загрузки курсора из основного потока, в фоновый, который бы не тормозил работу приложения для пользователя. ДА, Вы воспользовались командой swapCursor(cursor); но это как к японскому автомобилю березовая тяга. Эта команда предназначена для того, чтобы обновить данные в основном потоке на УЖЕ загруженный в фоновом режиме курсор. Изменения работы с курсором - большая тема, и там нельзя отделаться несколькими командами. Советую изучить КурсорЛоудеры или, хотя бы ассинхронные задачи, это первое. А второе - Контент Провайдеры, если нужно обмениваться инфо с другими приложениями. Хотя фанаты лепят их везде.

Комментариев нет:

Отправить комментарий