java.lang.NullPointerException:null 不能转换为非空类型 java.util.ArrayList<ModelClass>

问题描述

我的阵列适配器过滤器部分出现错误。当我尝试在自动完成文本视图应用程序崩溃中输入值并显示以下错误时,一切正常。

java.lang.NullPointerException: null 不能转换为非空类型 java.util.ArrayList

以下是我的代码

class ProductSearchAdapter(
    context: Context,private var list: ArrayList<SaleFilterListModel>
    ) : ArrayAdapter<SaleFilterListModel>(context,list){

    @SuppressLint("ViewHolder")
    override fun getView(position: Int,convertView: View?,parent: ViewGroup): View {
        val binding = ProductSearchListBinding.inflate(LayoutInflater.from(context),parent,false)

        val item = list[position]
        binding.searchProductName.text = item.productName
        binding.searchProductRate.text = item.saleAmount
        return binding.root
    }

    override fun getFilter(): Filter {
        return productFilter

    }

    private val productFilter: Filter = object : Filter() {
        override fun performFiltering(constraint: CharSequence): FilterResults {
            val results = FilterResults()
            val suggestions = ArrayList<SaleFilterListModel>()
            if (constraint.isEmpty()) {
                suggestions.addAll(list)
            } else {
                val filterPattern = constraint.toString().lowercase().trim()
                for (item in list) {
                    if (item.productName.lowercase().contains(filterPattern)) {
                        suggestions.add(item)
                    }
                }
            }
            results.values = suggestions
            results.count = suggestions.size
            return results
        }

        override fun publishResults(constraint: CharSequence?,results: FilterResults?) {
            list = results?.values as ArrayList<SaleFilterListModel>
            notifyDataSetChanged()
        }

        override fun convertResultToString(resultValue: Any?): CharSequence {
            return (resultValue as SaleFilterListModel).productName
        }
    }

}

解决方法

不看堆栈跟踪很难判断,但我认为 publishResults 函数是这里的罪魁祸首,因为它试图将 Nullable 类型 (results?.values) 强制转换为不可为空的 ArrayList<SaleFilterListModel>

当然,如果为 publishResults 参数传递了 null 值,则可能就是这种情况。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...