数组索引超出界限异常?

时间:2014-10-02 02:46:05

标签: android android-listview android-sqlite

首先,我的SQLite数据库在添加,删除等方面工作得很好。

我可以在Oncreate方法中加载ArrayList就好了。然而,

当我尝试以下操作时:

将新项添加到ArrayList,

Arraylist.clear();
LoadArrayList();   //reload the list
Adapter.notifyDataSetChanged();

它使用" ArrayIndexOutOfBoundsException:length = 6;指数= 6"

当我尝试这个时:

Arraylist.clear();
Adapter.notifyDataSetChanged();

ListView没有显示(这是我所期待的),所以它完成了它的工作。

结论:

当我尝试使用重新加载列表时,为什么它会让我关闭力量:

Arraylist.clear();
LoadArrayList();
Adapter.notifyDataSetChanged();

???????

此外,我确实检查了数据库中的新项目以查看它是否已保存。新项目已添加并正确保存。我不明白为什么我的LoadArrayList方法无法读取新项...

有人可以帮忙吗?

还有其他方法可以使用新更改刷新列表吗?

提前多多感谢。

编辑:添加代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);

…….

…..

    try {           
        Open_SQLITE_DATABASE();         
        LoadArrayList();    //Load the list at start    and IT WORKS …..                                    }       
    catch (Exception e) { }

…..

…..

     listView = (ListView)findViewById(R.id.ListView);
    listView.setAdapter(Arraylist);

    listView. setOnItemClickListener(new OnItemClickListener() {
    @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            .....


    }

    });

….

….


@Override
public boolean onOptionsItemSelected (MenuItem item)
{

    switch (item.getItemId())
    {
    case R.id.loadbutton:
        Arraylist.clear();
        LoadArrayList();   //NOT WORKING ??????
        Adapter.notifyDataSetChanged();

     return true;
   }

...

...

Public void LoadArrayList(){

    Cursor cursor = SQLITE_DATABASE.getWritableData().query(SQLite_Database.getDatabaseTable(), null, null, null, null, null, null, null);
    if(cursor != null)
    {
        while(cursor.moveToNext())
        {
            String POSITION = cursor.getString(cursor.getColumnIndex(SQLite_Database.Position));
            Arraylist.add(POSITION);            
        }
    }

}

2 个答案:

答案 0 :(得分:0)

您应该尝试访问的最大索引是5.索引编号从0开始。

length=6; index=6表示您正在尝试访问不存在的索引6。检查LoadArrayList()逻辑。

答案 1 :(得分:0)

我终于找到了解决方案:

@Override
public boolean onOptionsItemSelected (MenuItem item)
{

    switch (item.getItemId())
    {
    case R.id.loadbutton:
        Arraylist.clear();
        LoadArrayList(); 
        Adapter.notifyDataSetChanged();

        listView.setAdapter(Arraylist);   //This is needed to prevent the force close

     return true;
   }

基本上,listView.setAdapter(Arraylist)丢失了。我希望它可以帮助别人。