Как исправить Обязательный Итебель, но нашел Список в Котлине

Здравствуйте, я учусь создавать приложения с kotlin, но у меня есть стек с этой ошибкой: "Требуется повторяемый, найденный список", как я могу решить эту проблему? пожалуйста, смотрите мой код ниже спасибо

class MainActivity : AppCompatActivity(),ProductView {

private lateinit var productAdapter: ProductAdapter
private var productList: MutableList<ProductData> = mutableListOf()
private lateinit var dataPresenter : DataPresenter

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    initRecycler();
    getProduct()
}

private fun getProduct() {
    dataPresenter = DataPresenter(applicationContext,this)
    dataPresenter.getProduct()
}

private fun initRecycler() {
    productAdapter = ProductAdapter(this,productList)
    rvMain.layoutManager = LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)
    rvMain.adapter = productAdapter
}

override fun showLoading() {
    pgMain.visibility = View.VISIBLE
}

override fun hideLoading() {
    pgMain.visibility = View.GONE
}

override fun showProduct(products: List<ProductData>?) {
    if (products?.size != 0){
        this.productList.clear()
        this.productList.addAll(products)  // <= Required Iterable<ProductData>, Found List<ProductData>
        productAdapter.notifyDataSetChanged()
    }
}

}

1 ответ

Я подозреваю, что сообщение об ошибке на самом деле:

Required Iterable<ProductData>, Found List<ProductData>?

Знак вопроса в конце не просто пунктуация. Это обнуляемый индикатор в Котлине. List<ProductData> не может быть null, но List<ProductData>? Можно. И я верю, что addAll() требует неnull значение.

В идеале вы должны изменить ProductView так что подпись для showProduct() является fun showProduct(products: List<ProductData>),

В качестве альтернативы, вы можете переписать showProduct() быть:

override fun showProduct(products: List<ProductData>?) {
    if (products?.size != 0){
        this.productList.clear()
        products?.let { this.productList.addAll(it) }
        productAdapter.notifyDataSetChanged()
    }
}
Другие вопросы по тегам