Создать метод DataSource.Factory не получает вызовAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Создать метод DataSource.Factory не получает вызов

Сообщение Anonymous »

Я пытаюсь создать приложение-словарь с помощью библиотеки подкачки.
Когда пользователь пишет какие-либо буквы, я вызываю API и получаю все слова, включая эту букву.

Проблема в том, что когда я вызываю API через библиотеку подкачки в методе init{} моего ViewHolder, он работает отлично. но после этого, когда я пытаюсь написать что-то еще и получить соответствующие данные, библиотека подкачки даже не вызывает API. Я поставил точки останова повсюду и увидел, что после первого раза метод create() DataSource.Factory не получает вызова.

здесь это мой код:

Моя активность:

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

    viewModel = ViewModelProviders.of(this).get(DictionaryViewModel::class.java)
val adapter = DictionaryRecyclerPagedAdapter()
recycler.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
recycler.setHasFixedSize(true)
recycler.adapter = adapter

RxTextView.textChanges(edtWord)
.filter { it.isNotBlank() }
.subscribe({
adapter.submitList(null)
viewModel.getWord(it.toString())
Logger.d(it)

}, {
Logger.d(it)
})

viewModel.itemPagedList?.observe(this, Observer {
adapter.submitList(it)
})
Моя модель представления:

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

var liveDataSource: LiveData
>? = null
var itemPagedList: LiveData? = null

init {

getWord("pouya")
}

fun getWord(term: String) {

val dataSourceFactory = DictionaryDataFactory(term)
liveDataSource = dataSourceFactory.liveData

val config = PagedList.Config.Builder()
.setEnablePlaceholders(true)
.setPageSize(10)
.setPrefetchDistance(4)
.build()

itemPagedList = LivePagedListBuilder(dataSourceFactory, config).build()

}
Мой источник данных:

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

   class DictionaryDataSource(private val term: String) : PageKeyedDataSource() {

override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback) {
Logger.d("Initial")
composite.add(
repository.getWord(FIRST_PAGE, term)
.subscribe({
if (it.result != null)
callback.onResult(it.result, null, FIRST_PAGE + 1)
}, {
Logger.d(it)

})
)
}

override fun loadAfter(params: LoadParams, callback: LoadCallback) {
Logger.d("AFTER")
composite.add(repository.getWord(params.key, term)
.subscribe({
if (it.result != null)
callback.onResult(it.result, params.key + 1)
}, {
Logger.d(it)
})
)

}

}
Мой DataSource.Factory:

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

  class DictionaryDataFactory(private val term: String) : DataSource.Factory() {

val liveData = MutableLiveData
>()

override fun create(): DataSource {
val dataSource = DictionaryDataSource(term)
liveData.postValue(dataSource)
return dataSource
}
}
Итак, имейте в виду, что оно работает отлично, как только я запускаю приложение (оно получает все значения слова «pouya», как я вызвал его в методе init{} моего ViewHolder), но потом, когда я пишу что-то в тексте редактирования, вызываются все необходимые методы, кроме метода create() DataSource.Factory .

Любая помощь будет оценена по достоинству.

Подробнее здесь: https://stackoverflow.com/questions/559 ... t-get-call
Ответить

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

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

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

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

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