首页 > 解决方案 > 从数据库读取数据时索引超出范围

问题描述

正如您将在代码中看到的那样,我正在将数据库数据输入ArrayList并将其传递到listview,在 .Getting Exception 处dataIntArrayList3.get(i)。实际上有两个数据库,我在通过将一个数据库的数据listview存储到数组列表中来获取和获取另一个数据库的数据库时将一个数据库的数据传递给适配器。

        Cursor cursord=diffhelper.getAllData();

        if(cursord.getCount() ==0){
            return;
        }
        StringBuffer stringBuffer= new StringBuffer();
        while (cursord.moveToNext()) {

            dataIntArrayList3.add(cursord.getInt(1));
            Log.e("Difference","Dffkm:"+cursord.getInt(1));
        }

        //#######################################

        Cursor cursor=myhelper.getAllData();
        if(cursor.getCount() ==0){

            return;
        }
        int i=0;
        while (cursor.moveToNext()) {

            customDataListModelList.add(new CustomDataListModel(cursor.getString(2),cursor.getString(3),(cursor.getInt(1)),dataIntArrayList3.get(i)));

            Log.e("AllListData","Date:"+cursor.getString(2));
            Log.e("AllListData","Time"+cursor.getString(3));
            Log.e("AllListData","Km:"+cursor.getInt(1));

            i++;

        }

日志猫:

      java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
    at java.util.ArrayList.get(ArrayList.java:437)
    at com.quad14.obdnewtry.activity.KmListData.onCreate(KmListData.java:82)
    at android.app.Fragment.performCreate(Fragment.java:2503)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1256)
    at android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2426)
    at android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2205)
    at android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2161)
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2062)
    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:738)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6680)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

预期的结果是将两个数据库的值都放入列表视图。并且还想知道我的逻辑或代码有什么问题

导致其他光标移动的结果也发布在代码中:

 Cursor cursord=diffhelper.getAllData();

    int i=0;

    if(cursord.getCount() ==0){
        return;
    }
    StringBuffer stringBuffer= new StringBuffer();
    while (cursord.moveToNext()) {

        dataIntArrayList3.add(cursord.getInt(1));
        Log.e("Difference","Dffkm:"+cursord.getInt(1));

        Log.e("datachecking","arrayvlue:"+dataIntArrayList3.get(i));

        i++;

    }

其中的Logcat是:

2019-02-19 13:00:29.547 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:60
2019-02-19 13:00:29.547 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:63
2019-02-19 13:00:29.547 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:-126
2019-02-19 13:00:29.547 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:0
2019-02-19 13:00:29.547 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:1
2019-02-19 13:00:29.547 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:-1
2019-02-19 13:00:29.547 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:0
2019-02-19 13:00:29.547 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:9
2019-02-19 13:00:29.550 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:-9
2019-02-19 13:00:29.550 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:1
2019-02-19 13:00:29.550 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:-1
2019-02-19 13:00:29.551 6269-6269/com.quad14.obdnewtry E/datachecking: arrayvlue:1

标签: androiddatabasesqlite

解决方案


实际上你必须将光标位置更改为第一个

Cursor cursord=diffhelper.getAllData();

int i=0;

cursord.moveToFirst();

if(cursord.getCount() ==0){
    return;
}
StringBuffer stringBuffer= new StringBuffer();
while (cursord.moveToNext()) {

    dataIntArrayList3.add(cursord.getInt(1));
    Log.e("Difference","Dffkm:"+cursord.getInt(1));

    Log.e("datachecking","arrayvlue:"+dataIntArrayList3.get(i));

    i++;

}

推荐阅读