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