Java 为什么adapter.add()会创建无限循环并崩溃?
我正在制作一个Android应用程序,我的Java 为什么adapter.add()会创建无限循环并崩溃?,java,android,loops,adapter,android-arrayadapter,Java,Android,Loops,Adapter,Android Arrayadapter,我正在制作一个Android应用程序,我的adapter.add()实现似乎使应用程序崩溃。我不得不使用日志标记来发现我的代码奇怪地陷入了循环中。代码如下: int i =0; if(cards.size()>0){ Log.i("KOOL","Checked arraylist size =" + cards.size()); while(i < cards.size()){ Log.i("KOOL","Inside while loop");
adapter.add()
实现似乎使应用程序崩溃。我不得不使用日志标记来发现我的代码奇怪地陷入了循环中。代码如下:
int i =0;
if(cards.size()>0){
Log.i("KOOL","Checked arraylist size =" + cards.size());
while(i < cards.size()){
Log.i("KOOL","Inside while loop");
adapter.add(cards.get(i));
i++;
}
Log.i("KOOL","Added data to adapter");
adapter.notifyDataSetChanged();
Log.i("KOOL","Finished OnActivityResult");
}
inti=0;
如果(cards.size()>0){
Log.i(“KOOL”,“Checked arraylist size=“+cards.size());
而(i
应用程序到达日志标记“Inside while loop”并重复该标记,直到应用程序崩溃。我知道,
cards.size()
在while循环之前是2,所以我看不出应用程序崩溃的原因。我是否正确使用了适配器?请帮忙 你的问题缺少上下文。幸运的是,我知道您的适配器是ArrayAdapter
类型,并且正在使用卡进行初始化。循环开始时,cards.size()
为2。但是你可以在上面添加一些东西,制作cards.size()
be3。然后。。。我想你明白了。您可以通过适配器add
,或通过列表add
,向适配器/列表对添加内容。如果将其同时添加到这两个值中,则将添加两次
以下是ArrayAdapter::add
的代码:
public void add(T object) {
synchronized (mLock) {
if (mOriginalValues != null) {
mOriginalValues.add(object);
} else {
mObjects.add(object);
}
}
if (mNotifyOnChange) notifyDataSetChanged();
}
其中,mOriginalValues
是用于构造适配器的同一列表mObjects
是它们的过滤版本。@tibtof:我实际上在前面的问题中看到了他的全部代码,并且已经指出他做错了。你是说adapter.add(cards.get(I))添加到arraylist卡中了吗?那么,我到底需要while循环,还是在这个代码之前增加卡数时适配器会增加?@Daniel Katz:你根本不需要这个循环,适配器共享你用来初始化它的列表。适配器中的add
方法的唯一优点是它将为您调用notifyDataSetChanged
。谢谢!我想我真的不知道如何使用适配器。现在我的应用程序通过了那个部分,但由于另一个原因崩溃了。在LogCat中,它首先说“致命异常:main”,然后是“java.lang.NullPointerException”,然后是一堆东西。你知道会发生什么事吗?你需要更多我的代码吗?@Daniel Katz:从错误代码中,我能告诉你的是,你试图取消对null
指针的引用。