2

您好,我正在学习使用 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()
    }
}

}

4

1 回答 1

6

我怀疑错误消息实际上是:

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

最后的问号不仅仅是标点符号。这就是 Kotlin 中的可空指标。AList<ProductData>不能是null,但List<ProductData>?可以。我相信这addAll()需要一个非null价值。

理想情况下,您应该更改为isProductView的签名。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()
    }
}
于 2019-04-23T23:32:52.263 回答