Как исправить Обязательный Итебель, но нашел Список в Котлине - PullRequest
0 голосов
/ 24 апреля 2019

Здравствуйте, iam, изучаю приложения для сборки с 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 Ответ

4 голосов
/ 24 апреля 2019

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

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()
    }
}
...