AnKo SQLite: заполнить просмотр списка асинхронно из базы данных? - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь перевести мое приложение с Java на Kotlin.Я управляю базой данных с помощью AnKo SQLite

Все в порядке, кроме списков просмотра с помощью CursorLoaders: я не могу найти, как заменить CursorLoader при использовании AnKo SQLite.(и та же проблема с расширяемыми списками просмотра)

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 11 декабря 2018

ОК, вот мое решение ... Я не знаю, является ли оно лучшим:

  1. создайте новый класс kotlin "MyCursorLoader", расширяющий CursorLoader
  2. установить основной конструктор следующим образом:

    class MyCursorLoader( mContext: Context, val mTableName: String, var mProjection: Array<String>? = null, var mSelection: String = "1", var mSelectionArgs: Array<String> = emptyArray(), var mGroupBy: String = MySqlHelper.ID, var mHaving: String = "", var mSortOrder: String = "${MySqlHelper.ID} ASC", var mLimit: String = "", var mDistinct: Boolean = true ): CursorLoader(mContext) { val mObserver: Loader<Cursor>.ForceLoadContentObserver = Loader<Cursor>(mContext).ForceLoadContentObserver() var mCancellationSignal: CancellationSignal? = null

  3. переопределить метод OnLoadInBackground тем же кодом, что и встроенный, просто заменив val cursor = ContentResolverCompat.query(...строка с:

    val cursor = MySqlHelper.instance.readableDatabase.query(
        mDistinct, mTableName, mProjection, mSelection, mSelectionArgs, mGroupBy, mHaving, mSortOrder, mLimit, mCancellationSignal)
    

Так что нет необходимости заново создавать провайдер данных в манифесте, не нужно иметь дело с Uri ... Я могу использовать MyCursorLoader точно так же, как встроенный CursorLoader, вызывая еговот так:

    override fun onCreateLoader(id: Int, args: Bundle?): Loader<Cursor> {
        when (id) {
            DAY_HEADER_LOADER ->
                return MyCursorLoader(mContext, TABLE_EVENTS, arrayOf(ID, DAY), mGroupBy = DAY, mSortOrder = "$DAY  DESC")
        ...
        }
    }

Дайте мне знать, если это лучшее решение.

Надеюсь, что это может помочь.

...