我有一个适配器,它在我的 Activity 中扩展了 BaseAdapter。在适配器中,我列出了记录。当用户单击任何记录时,将列出选项。这些选项是“发送”和“删除”。删除选项从列表中删除记录并发送选项将记录发送到服务器。当发送被按下时,asynctask 被启动。对于删除操作,我在对话框中使用处理程序。(是或否)。
我的问题是,如果我在发送其他记录时在一条记录中按删除,应用程序会崩溃,我会收到此异常消息;
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
E/AndroidRuntime(25140): atandroid.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
我检查了很多次大小,大小不为0。我确定大小没有问题。
这段代码来 self 的删除操作;
public class MyAdapter extends BaseAdapter{
CopyOnWriteArratList<MyObject> MyCopyonWriteArrayList;
private Handler handler;
private ListView listview;
public MyAdapter(Context context,
CopyOnWriteArratList<MyObject> MyCopyonWriteArrayList,ListView listView){
this.context = context;
this.MyCopyonWriteArrayList= MyCopyonWriteArrayList;
this.listView = listView;
}
new Thread(new Runnable() {
@Override
public void run() {
//If I remove this line, app does not crash
MyObject o = MyCopyonWriteArrayList.get(position);
o.Delete();
MyCopyonWriteArrayList.remove(position);
//Code arrive here.
}
handler.post(new Runnable() {
//Code cannot arrive here
@Override
public void run() {
progressDialog.dismiss();
deleteDoneListener.deleteDone();
}
});
}
}).start();
} catch (Exception e) {
e.printStackTrace();
}
我的 asyntask 很典型。
我的问题是为什么我得到这个异常“索引 0,大小 0”?。此大小不是 myarraylist 大小。
如何修复此代码以及此尺寸的来源是什么?
此外,如果我在删除中使用 asynctask 而不是处理程序,我会得到“无法在未调用 Looper.prepare()] 的线程内创建处理程序”异常。所以我不能在对话框中放置 asyntack。
最佳答案
只需检查位置是否在范围内,如果是则将其删除并进行如下更改:
if(position != -1 && position < MyCopyonWriteArrayList.size()) {
MyCopyonWriteArrayList.remove(position);
}
一定会帮到你
关于android - Android 适配器中的错误 java.lang.IndexOutOfBoundsException : Invalid index 0, 大小为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13995537/