如何修复在 Kotlin 中需要可迭代但找到的列表



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

}

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

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

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

理想情况下,您应该更改ProductView,以便fun showProduct(products: List<ProductData>) showProduct()的签名。

或者,您可以将showProduct()重写为:

override fun showProduct(products: List<ProductData>?) {
    if (products?.size != 0){
        this.productList.clear()
        products?.let { this.productList.addAll(it) }
        productAdapter.notifyDataSetChanged()
    }
}

相关内容

  • 没有找到相关文章

最新更新