java - 适配器中的数组大小为 0 > MainActivity 中的数组大小为 0?

标签 java android arrays android-listview

发生在我身上的事情很奇怪。我有一个 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));
        }

现在 Activity 开始时没有崩溃,但是 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));

最佳答案

问题是列表的大小是 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));
}

关于java - 适配器中的数组大小为 0 > MainActivity 中的数组大小为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312896/

相关文章:

android - 无法在 xml 中设置操作栏图标

java - 为什么我的服务启动了两次?

android - 如何将缓存数据保存到sqlite DB(android)

javascript - 添加/覆盖数组中的对象

python - numpy 除法的问题

java - 如何在结果集中获取字符串(Table.Column) JayBird

java - Eclipse:自定义警告(Rhino 字符串参数)

java - JToolbar:JToggleButton 对齐

java - 这把锁到底有什么用呢?

c - 这是将数组从函数传回 main 的正确方法吗