android - Android 适配器中的错误 java.lang.IndexOutOfBoundsException : Invalid index 0, 大小为 0

标签 android android-asynctask android-adapter android-handler

我有一个适配器,它在我的 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/

相关文章:

java - listview.setAdapter(null) 似乎不起作用

安卓代码增强

java - setRequestProperty 方法给出 java.lang.IllegalStateException : Cannot set method after connection is made

android - 两个不同的 AsyncTasks 同时执行

android - RotationAsync 与 ListView 中的每一行

java - 无法将值放入 HashMap

android - Android Gmail 应用程序中的 Gmail 附加组件未显示

android - 是否可以在 iOS 或 Android 上的另一个应用程序中嵌入下载按钮 - 而无需离开原始应用程序?

java - 从 AsyncTask postExecute 返回回调响应 : Nullpointerexception

android - RecyclerView - 通过 bool 值控制项目计数