Пользовательский конструктор PageKeyedDataSource() приводит к сбою приложения в datasource.factory() библиотеки подкачкиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Пользовательский конструктор PageKeyedDataSource() приводит к сбою приложения в datasource.factory() библиотеки подкачки

Сообщение Anonymous »

Я пытаюсь отправить поисковый запрос в свой собственный источник данных, используемый в фабрике источников данных библиотеки подкачки. Когда мой класс источника данных пуст или когда у меня есть пустой конструктор вместе с модифицированным клиентом, который выполняет запрос на получение без параметров, тогда проблем нет, и данные загружаются нормально. Однако, когда я изменяю класс, чтобы он содержал поисковый запрос для модифицированного клиента, мое приложение аварийно завершает работу при возврате источника данных в AudiofileDataSourceFactory.create() в результате следующего вызова:

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

val audiofileList : LiveData =
dataSourceFactory.toLiveData(pageSize = 50)
в моей модели просмотра
Моя фабрика источников данных выглядит следующим образом:

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

class AudiofileDataSourceFactory : DataSource.Factory(){
private var searchQuery = ""
var mutableLiveData = MutableLiveData()

override fun create(): DataSource {
val audiofileDataSource = AudiofileDataSource(searchQuery)
mutableLiveData.postValue(audiofileDataSource)
return audiofileDataSource
}

fun setSearchQuery(query : String){
searchQuery = query
}

}
и мой источник данных выглядит следующим образом.

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

class AudiofileDataSource(text : String) : PageKeyedDataSource() {
var searchString = text

override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback) {

retrofitProvider.instance.getAudiofiles(searchString).enqueue(object : Callback {
override fun onFailure(call: Call, t: Throwable) {
print(t.message)
}
override fun onResponse(call: Call, response: Response) {
val audiofileList = response.body()!!
callback.onResult(audiofileList, null, 2)
}
})
}

override fun loadAfter(params: LoadParams, callback: LoadCallback) {
retrofitProvider.instance.getAudiofiles(searchString).enqueue(object : Callback {
override fun onFailure(call: Call, t: Throwable) {
}
override fun onResponse(call: Call, response: Response) {
val audiofileList = response.body()!!
callback.onResult(audiofileList, params.key + 1)
}
})
}

override fun loadBefore(params: LoadParams, callback: LoadCallback) {

}
}
Если в источнике данных я удалю поисковый запрос и не передам никаких параметров модифицирующему вызову, все будет работать нормально. Но, как и сейчас, происходит сбой при возврате audiofileDataSource в методе AudiofileDataSourceFactory.create(). Я думал, что, возможно, тип возвращаемого значения нельзя преобразовать в DataSource, но я не знаю, почему.


Подробнее здесь: https://stackoverflow.com/questions/567 ... factory-of
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»