java - 错误与removeAt java arraylist android

标签 java android kotlin

我从 Google Play 控制台收到错误:

FATAL EXCEPTION: ControllerMessenger
Process: my_package, PID: 19868
java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
    at java.util.ArrayList.remove(ArrayList.java:405)
    at my_package.notepad.utils_adapters.NotesAdapter.removeItem(NotesAdapter.kt:251)
    at my_package.notepad.utils_adapters.NotesAdapter.access$removeItem(NotesAdapter.kt:25)
    at my_package.notepad.utils_adapters.NotesAdapter$deleteNote$1.onResponse(NotesAdapter.kt:231)

据我所知,该应用程序尝试使用错误的索引,因此发生崩溃。问题就出在这个方法上:

private fun removeItem(position: Int) {
        records.removeAt(position)
        notifyItemRemoved(position)
        notifyItemRangeChanged(position, records.size)
    }

当用户尝试从特定列表中删除项目时可以调用此方法。我尝试用 remove 替换 removeAt,但我得到了使用 removeAt 的严格建议。也许我可以检查位置何时不等于-1,或者这是一个坏主意?

更新

删除项目方法调用:

private fun deleteNote(id: Int?, context: Context, position: Int) {
        Singleton.apiService().deleteNote("Bearer " + context.getSharedPreferences("app_data", 0).getString("access_token", ""), id).enqueue(object : Callback<NoteAction> {
            override fun onResponse(call: Call<NoteAction>, response: Response<NoteAction>) {
                if (response.isSuccessful) {
                    Toast.makeText(context, "Successfully deleted", Toast.LENGTH_SHORT).show()
                    removeItem(position)
                } else {
                    try {
                        val jObjError = JSONObject(Objects.requireNonNull<ResponseBody>(response.errorBody()).string())
                        Singleton.error["message"] = jObjError.getString("message")
                        Singleton.error["request_no"] = "19"
                        Singleton.workingWithErrors(Singleton.error, context)
                    } catch (e: Exception) {

                    }
                }
            }

            override fun onFailure(call: Call<NoteAction>, t: Throwable) {
            }

        })

最佳答案

在执行删除操作之前尝试检查集合中包含的位置。

private fun removeItem(position: Int) {
    if(position < 0 || position >= records.size)
        return

    records.removeAt(position)
    notifyItemRemoved(position)
    notifyItemRangeChanged(position, records.size)
}

关于java - 错误与removeAt java arraylist android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58727104/

相关文章:

java - MongoDB Java 驱动程序 : MongoCore Driver vs. MongoDB 驱动程序与 MongoDB 异步驱动程序

java - 如何将Sublime Text的UI主题获取到NetBeans?

java - 如何使用vertx解析查询参数?

c# - Xamarin:java.security.cert.CertPathValidatorException:找不到证书路径的信任 anchor

android - 为不同的 Activity 实现 admob

java - 错误: [Dagger/MissingBinding] error message doesn't make sense

android - 表达式不能是 Kotlin 中的选择器(出现在点之后)

java - 错误循环

android - Cordova | ERR_FILE_NOT_FOUND(文件 :///android_assets/www/index. html)

Kotlin:遍历列表并组合相同的项目