Как отобразить десериализованные данные JSON в RecyclerView с помощью Kotlin?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как отобразить десериализованные данные JSON в RecyclerView с помощью Kotlin?

Сообщение Anonymous »

В настоящее время я работаю над проектом, для которого требуется функция поиска, извлекающая данные JSON с веб-сайта. Приложение должно отображать эти данные с помощью RecyclerView. Однако студия Android отказывается принимать мой набор данных в адаптер recyclerview. Мои десериализованные данные JSON поступают в виде списка и десериализуются с помощью сериализатора KotlinX.

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

@Serializable
data class searchResults(@SerialName("name") val name: String,
@SerialName("description") val description: String,
@SerialName("website") val website: String )

val query = Query(searchBox.getText().toString())
val result = index.search(query)

val searchObject: List =
result.hits.deserialize(searchResults.serializer())

adapter = resultsAdapter(searchObject)
recyclerView.adapter = adapter
Однако адаптер настаивает на том, чтобы взять с собой класс данных десериализатора searchResults в то место, где он обычно занимает класс данных ViewHolder.

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

class resultsAdapter(var searchObject: List) : RecyclerView.Adapter(){

inner class resultsViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView){
val name: TextView = itemView.findViewById(R.id.nameResult)
val description: TextView = itemView.findViewById(R.id.descriptionResult)
val website: TextView = itemView.findViewById(R.id.websiteResult)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): resultsViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.rowlayout, parent, false)
return resultsViewHolder(view)
}

override fun getItemCount(): Int {
return searchObject.size

}

override fun onBindViewHolder(holder: resultsViewHolder, position: Int) {

val currentItem = searchObject[position]
holder.name.text = currentItem.name
holder.description.text = currentItem.description
holder.website.text = currentItem.website

}

}
Изучив онлайн-документацию, я считаю, что класс данных ViewHolder должен быть инициализирован в адаптере результатов. Должно быть написано:

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

class resultsAdapter(var searchObject: List)
вместо:

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

class resultsAdapter(var searchObject: List)
однако во время инициализации переменной всякий раз, когда я пытаюсь реализовать это изменение, я получаю сообщение об ошибке:

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

Type mismatch: inferred type is List but
List was expected
Как это правильно сделать?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ing-kotlin
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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