匿名类中switch内break报错:‘break outside switch or loop’问题求助
问题原因与解决方案
嘿,我一眼就揪出问题所在了!
你遇到的编译错误,根源是那个报错的break所处的位置完全不在任何switch语句或循环结构的范围内——它被写在最内层ValueEventListener的onDataChange回调方法里了。
具体拆解你的代码结构
你的代码嵌套层级是这样的:
switch (checkedId) { case R.id.first: // 第一层监听 mDatabase...addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // 内层switch switch (Integer.parseInt(dataSnapshot.getValue().toString())){ case 2: // 第二层监听 mDatabase...addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // 就是这里的break! break; } }); break; // 这个break是内层switch case2的,没问题 } } }); break; }
Java里的break关键字只能用来跳出当前所在的switch语句或者循环,但那个报错的break属于一个独立的回调方法onDataChange,它和外层的switch没有结构上的包含关系,编译器找不到它该跳出的switch/循环,自然会抛出“break outside switch or loop”的错误。
解决办法
根据你写这个break的意图,有两种修正方式:
- 如果是想结束当前
onDataChange方法的执行:把break换成return;——return是用来退出方法的,这才是正确的用法。 - 如果是想跳出某个switch:你需要把逻辑调整到switch的范围内,而不是在回调方法里写break(因为回调方法是异步执行的,和外层switch的执行时机完全无关)。
修正后的代码示例(替换break为return):
case R.id.first: mDatabase.child("questions").child("basic").child("comments").child("first").child("answers").child("correct").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { switch (Integer.parseInt(dataSnapshot.getValue().toString())){ case 1: break; case 2: mDatabase.child("questions").child("basic").child("comments").child("first").child("mistakes").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { getValue = Integer.parseInt(dataSnapshot.getValue().toString()); getValue++; mDatabase.child("questions").child("basic").child("comments").child("first").child("mistakes").setValue(getValue); // 用return代替break,结束当前回调方法 return; } @Override public void onCancelled(DatabaseError databaseError) { } }); break; // 这个break对应内层switch的case2,有效 } } @Override public void onCancelled(DatabaseError databaseError) { } }); break;
内容的提问来源于stack exchange,提问作者MonkeyDkon
相关产品推荐
相关产品推荐

