微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修复 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 onbindviewholder

如何解决如何修复 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 onbindviewholder

我正在开发这个应用程序,当我滑动 viewpager java.lang.indexoutofboundsexception: Index: 0,Size: 0 这就是崩溃指向的地方时,我不断收到此错误。我已经尝试搜索但找不到解决方案。

这是我的适配器类的样子:我感觉这可能是我的错误定位,因为调试后它说这条线上的位置 when (expenseData[position][0].expenseDate) { 是 1 但我通过了 0?

class TransactionAdapter(
        private val activity: Activity,private val expenseData: ArrayList<ArrayList<ExpenseData>>,private val totalExpenseAmount: Double)
    : RecyclerView.Adapter<GeneralViewHolder>(),TransactionItemListener {

  

    open class GeneralViewHolder(view: View?) : RecyclerView.ViewHolder(view!!)
    internal class CustomViewHolder(val binding: TransactionsListBinding) : GeneralViewHolder(binding.root) {

        fun setTotalExpenseDate(date: String?) {
            binding.totalExpenseDate.text = date
        }

        fun setTotalExpenseAmount(amount: String?) {
            binding.totalExpenseAmount.text = amount
        }
    }


    override fun getItemViewType(position: Int): Int {
        return if (position == 0) -1 else position
    }

    override fun onCreateViewHolder(viewGroup: ViewGroup,viewType: Int): GeneralViewHolder {
        val holder: GeneralViewHolder
        val view: View
        if (viewType == -1) {
            view = LayoutInflater.from(activity)
                    .inflate(R.layout.month_summary_card,viewGroup,false)
            holder = MonthSummaryCard(view)
        } else {
            val view1 = TransactionsListBinding.inflate(LayoutInflater.from(activity))
            holder = CustomViewHolder(view1)
        }
        return holder
    }

    override fun onBindViewHolder(holder: GeneralViewHolder,position: Int) {
     
                when (expenseData[position][0].expenseDate) {
                    SimpleDateFormat("MMM dd,yyyy",Locale.US).format(Date()) -> holder1.setTotalExpenseDate("Today")
                    else -> holder1.setTotalExpenseDate(expenseData[position][0].expenseDate)
                }

                expenseData[position].forEach { expenseData ->
                    if (expenseData.expenseType == "Expense") totalExpense += expenseData.expenseAmount else totalIncome += expenseData.expenseAmount
                }
                val amount = totalIncome - totalExpense
                if (amount < 0) holder1.setTotalExpenseAmount(expenseData[position][0].currency + " " +
                        java.lang.Double.valueOf(amount * -1).toString()) else holder1.setTotalExpenseAmount(expenseData[position][0].currency + " " + String.format(Locale.US,"%1$,.2f",amount))
            }
        } catch (e: NullPointerException) {
            Timber.d("Currency null")
        }
    }

    override fun getItemCount(): Int {
        return expenseData.size
    }
}

将感谢反馈..

解决方法

在 onBindViewHolder 中,您正在访问费用数据 [位置][0].费用日期而不检查费用数据 [位置] 是否具有非零大小。它没有 - 你那里没有任何数据。根据您提供的代码,无法判断您的数据为何出错。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。