这对我来说是非常奇怪的事情..我有一个ArrayAdapter,其中data
值的大小导致logcat = 0.所以这个数组似乎是空的。我尝试在MainActivity中插入,我在列表中添加我的项目,条件是查看结果的数组大小> 0.我需要这个数组在另一个数组中是相等的,条件是:
if (titoli.size() > data.size())
Log.w("Array compare", "Titoli > Data!"+ " " + titoli.size() + " " + data.size());
结果是MainActivity中的Titoli > Data 48 38
和适配器中的Titoli > Data 48 0
!所以列表崩溃!!为了绕过这个问题,我创建了这个条件:
if (this.data.size() > 0){
cache.dateArticoli.setText(data.get(pos));
}
现在活动开始时没有崩溃,但只有当我开始滚动列表时出现data
,当我到达列表末尾时,我遇到了这个logcat的崩溃:
01-23 16:42:16.955: E/AndroidRuntime(19400): FATAL EXCEPTION: main
01-23 16:42:16.955: E/AndroidRuntime(19400): Process: it.dd.multiplayerit, PID: 19400
01-23 16:42:16.955: E/AndroidRuntime(19400): java.lang.IndexOutOfBoundsException: Invalid index 33, size is 33
01-23 16:42:16.955: E/AndroidRuntime(19400): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
01-23 16:42:16.955: E/AndroidRuntime(19400): at java.util.ArrayList.get(ArrayList.java:308)
01-23 16:42:16.955: E/AndroidRuntime(19400): at it.dd.multiplayerit.ParsingArrayAdapter.getView(ParsingArrayAdapter.java:97)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.widget.AbsListView.obtainView(AbsListView.java:2240)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.widget.ListView.makeAndAddView(ListView.java:1790)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.widget.ListView.fillDown(ListView.java:691)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.widget.ListView.fillGap(ListView.java:655)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5136)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4247)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.view.Choreographer.doFrame(Choreographer.java:543)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.os.Handler.handleCallback(Handler.java:733)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.os.Handler.dispatchMessage(Handler.java:95)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.os.Looper.loop(Looper.java:136)
01-23 16:42:16.955: E/AndroidRuntime(19400): at android.app.ActivityThread.main(ActivityThread.java:5081)
01-23 16:42:16.955: E/AndroidRuntime(19400): at java.lang.reflect.Method.invoke(Native Method)
01-23 16:42:16.955: E/AndroidRuntime(19400): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
01-23 16:42:16.955: E/AndroidRuntime(19400): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
我无法理解为什么!
第97行:
cache.dateArticoli.setText(data.get(pos));
答案 0 :(得分:2)
问题是列表的大小是33,您正在访问data.get(33)
访问列表应低于列表大小。
java.lang.IndexOutOfBoundsException: Invalid index 33, size is 33
我认为也需要这样做
if (this.data.size() > 0 && pos < this.data.size()){
cache.dateArticoli.setText(data.get(pos));
}
答案 1 :(得分:1)
阵列从0
开始,请尝试
this.data.size()-1