Индекс выходит за границы при чтении данных из базы данных - PullRequest
0 голосов
/ 19 февраля 2019

Как вы увидите в коде, я получаю данные базы данных в ArrayList и передаю их в listview, получая исключение в dataIntArrayList3.get (i).На самом деле существует две базы данных, я передаю данные одной базы данных в адаптер списка во время выборки и получения базы данных другой базы данных, используя ее сохранение в списке массивов.

        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++;

        }

Logcat:

      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

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

На самом деле вы должны изменить местоположение курсора на первый

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++;

}
0 голосов
/ 19 февраля 2019
while (cursor.moveToNext()) {
        **if (dataIntArrayList3.size() < i){
            break;
        }**
        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++;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...