Я пытаюсь отправить поисковый запрос на мой пользовательский источник данных, используемый в фабрике источников данных библиотеки подкачки. Когда мой класс источника данных пуст или когда у меня есть пустой конструктор вместе с модифицированным клиентом, который выполняет запрос get без параметров, тогда нет проблем, и он загружает данные просто отлично. Однако, когда я изменяю класс, чтобы он содержал поисковый запрос для модифицированного клиента, мое приложение аварийно завершает работу при возврате источника данных в AudiofileDataSourceFactory.create () в результате следующего вызова:
val audiofileList : LiveData<PagedList<Audiofile>> =
dataSourceFactory.toLiveData(pageSize = 50)
по моему мнению модель
Моя фабрика источников данных выглядит следующим образом:
class AudiofileDataSourceFactory : DataSource.Factory<Int, Audiofile>(){
private var searchQuery = ""
var mutableLiveData = MutableLiveData<AudiofileDataSource>()
override fun create(): DataSource<Int, Audiofile> {
val audiofileDataSource = AudiofileDataSource(searchQuery)
mutableLiveData.postValue(audiofileDataSource)
return audiofileDataSource
}
fun setSearchQuery(query : String){
searchQuery = query
}
}
и мой источник данных выглядит следующим образом.
class AudiofileDataSource(text : String) : PageKeyedDataSource<Int, Audiofile>() {
var searchString = text
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Audiofile>) {
retrofitProvider.instance.getAudiofiles(searchString).enqueue(object : Callback<List<Audiofile>> {
override fun onFailure(call: Call<List<Audiofile>>, t: Throwable) {
print(t.message)
}
override fun onResponse(call: Call<List<Audiofile>>, response: Response<List<Audiofile>>) {
val audiofileList = response.body()!!
callback.onResult(audiofileList, null, 2)
}
})
}
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Audiofile>) {
retrofitProvider.instance.getAudiofiles(searchString).enqueue(object : Callback<List<Audiofile>> {
override fun onFailure(call: Call<List<Audiofile>>, t: Throwable) {
}
override fun onResponse(call: Call<List<Audiofile>>, response: Response<List<Audiofile>>) {
val audiofileList = response.body()!!
callback.onResult(audiofileList, params.key + 1)
}
})
}
override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, Audiofile>) {
}
}
Если в источнике данных я удаляю поисковый запрос и не передаю никакие параметры вызову дооснащения, он работает нормально. Но в настоящее время происходит сбой при возврате audiofileDataSource в методе AudiofileDataSourceFactory.create (). Я думал, что, возможно, возвращаемый тип не может быть преобразован в источник данных, но я не уверен, почему.
Заранее спасибо за помощь!