我有一个在我的活动中扩展 BaseAdapter 的适配器。在适配器中,我列出了记录。当用户单击任何记录时,将列出选项。这些选项是“发送”和“删除”。删除选项从列表中删除记录并发送选项发送记录到服务器。当发送被按下时,异步任务被启动。对于删除操作,我在对话框中使用处理程序。(是或否)。
我的问题是,如果我在一条记录中按删除,而其他记录正在发送,应用程序崩溃,我得到了这个异常;
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。我确定尺寸没有问题。
此代码来自我的删除操作;
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。