您将在代码中看到,我正在将数据库数据放入ArrayList并将其传递到listview,在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++;
}
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
答案 0 :(得分:0)
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++;
}
答案 1 :(得分:0)
实际上,您必须将光标位置更改为第一个
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++;
}