Java 安卓&x2B;列表=崩溃?
编辑3: 我在列表上运行,它显示了我添加的第一个内容(箭头),如代码所示:Java 安卓&x2B;列表=崩溃?,java,android,list,Java,Android,List,编辑3: 我在列表上运行,它显示了我添加的第一个内容(箭头),如代码所示: try { menuButtonList.add(m2); } catch (Exception e){ Toast.makeText(c, ""+e.getMessage(),Toast.LENGTH_LONG).show(); } ,这意味着我可以向它添加东西,因为在if(order==0)上它添加的很好,但是为什么在它之后,它会崩溃?正如一些人在评论中提到的,如果没有堆栈跟踪,那么似乎没有任何理由相信异常是
try {
menuButtonList.add(m2);
}
catch (Exception e){
Toast.makeText(c, ""+e.getMessage(),Toast.LENGTH_LONG).show();
}
,这意味着我可以向它添加东西,因为在if(order==0)上它添加的很好,但是为什么在它之后,它会崩溃?正如一些人在评论中提到的,如果没有堆栈跟踪,那么似乎没有任何理由相信异常是由您向我们展示的第三行代码引起的。在我看来,您可能在这里引起了
ConcurrentModificationException
:
if(order==0){
p.x=0;
p.y=0;
MenuButton m=new MenuButton(order,b , vertical, p,name);
menuButtonList.add(m);
}
这是由于您在迭代列表时试图将项目添加到列表中造成的。相反,您最好创建一个单独的列表,然后在完成迭代后将其内容复制到菜单按钮列表中
for (MenuButton m : menuButtonList) {
if((m.isVertical()==vertical||order==1)&&m.getOrder()+1==order ){
// ...
MenuButton m2=new MenuButton(order,b , vertical, p,name);
menuButtonList.add(m2);
// ...
}
}
List newButtons=new ArrayList();
for(菜单按钮m:菜单按钮列表){
// ...
菜单按钮m2=新菜单按钮(顺序、b、垂直、p、名称);
纽扣。增加(m2);
// ...
}
用于(菜单按钮新按钮:新按钮){
menuButtonList.add(newButton);
}
请注意,在该循环中添加menuButtonList.add(m2)
将触发堆栈跟踪以报告该特定行上的错误,但在缺少其余代码的情况下,这是完全有效的。解释“崩溃”。请发布异常堆栈。我怀疑您没有向我们展示所有内容。如果一个变量上有一个private
修饰符,那么它就不能在一个方法中,接下来的2行代码需要在一个方法(或静态块)中执行。我不知道如何使用Bluestack获得它,它只是在没有错误的情况下崩溃。.我添加了其余的代码,如果你不能得到错误或调试,你怎么知道这是它坠毁的地方?我现在明白了,你是对的!只是没有复制内容,我只是叫了return;就在添加之后。谢谢大家的帮助,这里的社区太棒了!
if(order==0){
p.x=0;
p.y=0;
MenuButton m=new MenuButton(order,b , vertical, p,name);
menuButtonList.add(m);
}
for (MenuButton m : menuButtonList) {
if((m.isVertical()==vertical||order==1)&&m.getOrder()+1==order ){
// ...
MenuButton m2=new MenuButton(order,b , vertical, p,name);
menuButtonList.add(m2);
// ...
}
}
List<MenuButton> newButtons = new ArrayList<MenuButton>();
for (MenuButton m : menuButtonList) {
// ...
MenuButton m2=new MenuButton(order,b , vertical, p,name);
newButtons.add(m2);
// ...
}
for (MenuButton newButton : newButtons) {
menuButtonList.add(newButton);
}