gpt4 book ai didi

java - if 语句不起作用,我收到 java.lang.IndexOutOfBoundsException : Invalid index 0, size is 0

转载 作者:行者123 更新时间:2023-12-01 10:43:12 25 4
gpt4 key购买 nike

我有一个应用程序,它从用户那里获取数据并将其插入到 SQLite 数据库中。然后,该信息被放入一个数组中,并通过可滚动的 textView 显示给用户。

当您尝试使用它时,如果您没有在要显示的数据库中插入任何内容,应用程序会遇到 java.lang.IndexOutOfBoundsException 错误,我用一个简单的 if 语句解决了这个问题。

这是代码,这样你就可以看到我在说什么-

public void mode(){
if (array.isEmpty() == false && end == 0) {
textView.setText(array.get(currentPos));

nextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

currentPos++;
if (currentPos > array.size() - 1) currentPos = 0;
textView.setText(array.get(currentPos));


}
});

prevBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

currentPos--;
if (currentPos < 0) currentPos = array.size() - 1;
textView.setText(array.get(currentPos));
}
});


} else {
textView.setText("Nothing to display yet.");

}
}

这是解决该问题的方法,因此如果数组中没有任何内容,我仍然可以滚动数组而不会导致错误。

但是,当我添加从数据库中删除项目的功能时这是代码-

public void DeleteData(){

removeBtnInsideMenu.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean deletedRows = myDB.deleteData(textView.getText().toString());
if (deletedRows == true){
Toast.makeText(thisMenu.this, "Deleted", Toast.LENGTH_LONG).show();
array.clear(); //clears array
viewAll(); //recalls database and refills array
if (array.isEmpty() == false){ //plays if the array has something in it
onLeftSwipe();
}
if (array.isEmpty()){
checker = true;
end++;
}

}
else if (array.isEmpty() && checker == true){
favoriteCurrent.setText("Nothing to display yet.");
Toast.makeText(thisMenu.this, "Everything has been deleted", Toast.LENGTH_LONG).show();
end++;
checker = false;


}
else {
Toast.makeText(thisMenu.this, "There is nothing to delete", Toast.LENGTH_LONG).show();
end++;


}


}
}
);
}

在从数据库(以及随后的数组)中删除所有内容后,我再次遇到了这个问题,基本上当您按下下一个/上一个按钮时,错误会在一个非常特定的位置再次弹出,您会收到越界错误。我对此完全困惑,因为 if 语句应该通过不允许该部分代码运行来处理它,我什至添加了一个额外的参数,其中一个名为 end 的 int 设置为 0,然后在末尾递增因此,如果您删除了所有内容,则 if 语句不会为 true,它应该默认为 else 语句。

我对这个感到困惑,除非我遗漏了一些小东西或者有一些我不知道的问题 - 任何帮助将不胜感激。

为了清楚起见,这里是 logcat 错误(如果有帮助的话)-

12-17 11:48:27.584 29014-29014/com.ded.www.rj E/AndroidRuntime: FATAL EXCEPTION: main                                                                               Process: com.ded.www.rj, PID: 29014
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.ded.www.rj.thisMenu$1.onClick(thisMenu.java:166)
at android.view.View.performClick(View.java:4654)
at android.view.View$PerformClick.run(View.java:19438)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

一旦数据库中有一些数据,您的 onClickListeners 就会被设置。因此,在添加一些数据,然后调用删除方法后,单击“上一个”和“下一个”按钮仍会尝试单步遍历数组。由于数据已被删除,因此导致出现越界错误。

我会在 onClick 方法中添加一个 if 语句,这样如果数组为空,它就不会尝试单步执行该数组。

关于java - if 语句不起作用,我收到 java.lang.IndexOutOfBoundsException : Invalid index 0, size is 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34340531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com