自定义构造函数pageKeyedDataSource()crashes crash app在dataSource.fac



我正在尝试将搜索查询发送到页码库数据源工厂中使用的自定义数据源。当我的DataSource类是空的,或者当我将一个空构造函数与Raterrofit客户端一起执行无参数的get请求时,就没有问题,并且可以加载数据。但是,当我修改类以包含Raterofit客户端的搜索查询时,我的应用在返回audiofiledatasourcefactory.create.create((的dataSource时会崩溃((,这是由于以下呼叫的结果:

val audiofileList : LiveData<PagedList<Audiofile>> =
            dataSourceFactory.toLiveData(pageSize = 50)

在我的ViewModel中

我的数据源工厂看起来如下:

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>) {
    }
}

如果在数据源中,我删除了搜索标记,并将没有参数传递给"修改调用",则可以正常工作。但是现在它已经在AudioofileDatasourceFactory.Create((方法的返回AudiofileDatasource上崩溃。我在想也许返回类型不能转换为数据源,但我不确定为什么。

事先感谢您的帮助!

已解决:

上面的代码正常工作,但改造给了我没有抓住的例外(由于畸形的请求(,因此我的程序崩溃了。

最新更新