Я сейчас создаю приложения, используя Retrofit и Kotlin .Пока что я могу анализировать JSON с офисного сервера.Но теперь у меня проблема с отображением данных.Я уже читал о карте Котлина, но не могу полностью понять это.Для моего JSON с сервера я не могу загрузить его, потому что есть конфиденциальность данных моей компании.Итак, я буду использовать фиктивный JSON, но структура такая же, как у JSON моей компании.Вот оно:
{"market":
"101":
{"name": "xxx",
"image": "/folderPath/imageName.jpg"
}
"102":
{"name": "yyy",
"image": "/folderPath/image2Name.jpg"
}
}
О классе данных, я использую List <> для инициализации класса данных, вот оно:
data class Product(
@SerializedName("Market") val Market: List<MarketContent> = listOf()
)
data class MarketContent(
@SerializedName("Name") val Name: String,
@SerializedName("Image") val Image: String
)
То, что я пробовал в моем RecyclerViewАдаптер выглядит следующим образом:
class OtherProductAdapter(private val otherProductList: List<MarketContent>, private val clickListener: (MarketContent) -> Unit) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.other_product, parent, false)
return ListOther(v)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
(holder as ListOther).bindItem(otherProductList[position], clickListener)
}
override fun getItemCount() = otherProductList.size
class ListOther(itemView: View) : RecyclerView.ViewHolder(itemView){
private val rImg = itemView.findViewById<ImageView>(R.id.rv_image)
fun bindItem(t: MarketContent, clickListener: (MarketContent) -> Unit){
itemView.rv_title.text = t.Name
Glide.with(itemView.context).load("http://192.168.1.100:3232" +t.Image).into(rImg)
itemView.setOnClickListener {clickListener(t)}
}
}
}
А вот и моя модификация
private fun getInto() {
val apiService = ProductApiService()
disposable =
apiService.syncData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ result -> intoData(result) },
{ error -> Log.e("Error", error.message) }
)
}
private fun intoData(result: Product) {
rv_view?.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
rv_view?.hasFixedSize()
rv_view?.adapter = OtherProductAdapter(result.Market, { item: MarketContent -> clickedItem(item) })
}
В результате мое приложение не показывает никаких данных, и появляется сообщение:
E / Ошибка: java.lang.IllegalStateException: Ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1 столбца 109719 path $ .Market
Помогите мне, как я должен отобразить данные JSON.Заранее спасибо.