switch-case 不能正常工作
switch-case does not work properly
我在下面发布的代码中,当我离开字段 ip
blank/empty 并为其他字段赋值时,toast
总是给出消息 KATimer is invalid or missing
。
我希望看到 toast
显示一条消息,指示空字段,但下面的代码,如果任何字段为空,它总是显示 KATimer is invalid or empty
。
为什么会这样,我漏掉了一些东西
代码:
btnStubView_Connect:
btnStubView_Connect.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (isValidMQTTConfigs(etStubView_ip) &&
isValidMQTTConfigs(etStubView_port) &&
isValidMQTTConfigs(etStubView_ClientID) &&
isValidMQTTConfigs(etStubView_KATimer)) {
Log.d(TAG, "@btnStubView_ConnectListener(): all entries are valid");
setCSession(cbStubView_CS.isChecked()); // set the current state of the cleanSession checkBox.
addToContentValues();
Log.d(TAG, "@btnStubView_ConnectListener(): all entries added toContentValues");
} else {
Log.w(TAG, "@btnStubView_ConnectListener(): one or more entry(s) is invalid or left blank.");
}
}
});
isValidMQTTConfigs:
protected boolean isValidMQTTConfigs(View view) {
// TODO Auto-generated method stub
boolean valid = false;
String viewName = "";
switch(view.getId()) {
case R.id.etSubView_ip:
viewName = "IP";
if (isDuly( ((EditText) view).getText().toString())) {
this.setIP(((EditText) view).getText().toString());
return valid = true;
}
case R.id.etSubView_port:
viewName = "Port";
if (isDuly( ((EditText) view).getText().toString())) {
this.setPort(((EditText) view).getText().toString());
return valid = true;
}
case R.id.etSubView_clientID:
viewName = "clientID";
if (isDuly( ((EditText) view).getText().toString())) {
this.setClienID(((EditText) view).getText().toString());
return valid = true;
}
case R.id.etSubView_KATimer:
viewName = "KAtimer";
if (isDuly( ((EditText) view).getText().toString())) {
this.setKATimer(((EditText) view).getText().toString());
return valid = true;
}
}
Log.w(TAG, "@checkMQTTConfigs(): " + viewName + " is invalid or missing");
Toast.makeText(getActivity(), viewName + " is invalid or missing", Toast.LENGTH_SHORT).show();
return valid;
}
正常:
private boolean isDuly(String text) {
// TODO Auto-generated method stub
if (text.trim().equals("")) {
return false;
} else {
return true;
}
}
您没有在每个 case
之后使用 break;
,这会导致以下情况执行,即使您不希望它们执行。例如,这是正确的:-
switch(int){
case 1:
break;
case 2:
break;
}
虽然这并没有错,但这会导致意外的输出:-
switch(int){
case 1:
case 2:
}
省略break
会导致在执行case 1之后执行case 2。
您似乎遗漏了几个 break 语句。
Switch(X){
case 1: doOne();
case 2: doTwo();
case 3: doThree();
}
瀑布流确保如果 X 为 2,则 doTwo 和 doThree 都将被执行。如果X为1,三个方法都会被执行。
如果只想调用链接方法,将代码改成:
Switch(X){
case 1: doOne(); break;
case 2: doTwo(); break;
case 3: doThree(); break;
}
我在下面发布的代码中,当我离开字段 ip
blank/empty 并为其他字段赋值时,toast
总是给出消息 KATimer is invalid or missing
。
我希望看到 toast
显示一条消息,指示空字段,但下面的代码,如果任何字段为空,它总是显示 KATimer is invalid or empty
。
为什么会这样,我漏掉了一些东西
代码:
btnStubView_Connect:
btnStubView_Connect.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (isValidMQTTConfigs(etStubView_ip) &&
isValidMQTTConfigs(etStubView_port) &&
isValidMQTTConfigs(etStubView_ClientID) &&
isValidMQTTConfigs(etStubView_KATimer)) {
Log.d(TAG, "@btnStubView_ConnectListener(): all entries are valid");
setCSession(cbStubView_CS.isChecked()); // set the current state of the cleanSession checkBox.
addToContentValues();
Log.d(TAG, "@btnStubView_ConnectListener(): all entries added toContentValues");
} else {
Log.w(TAG, "@btnStubView_ConnectListener(): one or more entry(s) is invalid or left blank.");
}
}
});
isValidMQTTConfigs:
protected boolean isValidMQTTConfigs(View view) {
// TODO Auto-generated method stub
boolean valid = false;
String viewName = "";
switch(view.getId()) {
case R.id.etSubView_ip:
viewName = "IP";
if (isDuly( ((EditText) view).getText().toString())) {
this.setIP(((EditText) view).getText().toString());
return valid = true;
}
case R.id.etSubView_port:
viewName = "Port";
if (isDuly( ((EditText) view).getText().toString())) {
this.setPort(((EditText) view).getText().toString());
return valid = true;
}
case R.id.etSubView_clientID:
viewName = "clientID";
if (isDuly( ((EditText) view).getText().toString())) {
this.setClienID(((EditText) view).getText().toString());
return valid = true;
}
case R.id.etSubView_KATimer:
viewName = "KAtimer";
if (isDuly( ((EditText) view).getText().toString())) {
this.setKATimer(((EditText) view).getText().toString());
return valid = true;
}
}
Log.w(TAG, "@checkMQTTConfigs(): " + viewName + " is invalid or missing");
Toast.makeText(getActivity(), viewName + " is invalid or missing", Toast.LENGTH_SHORT).show();
return valid;
}
正常:
private boolean isDuly(String text) {
// TODO Auto-generated method stub
if (text.trim().equals("")) {
return false;
} else {
return true;
}
}
您没有在每个 case
之后使用 break;
,这会导致以下情况执行,即使您不希望它们执行。例如,这是正确的:-
switch(int){
case 1:
break;
case 2:
break;
}
虽然这并没有错,但这会导致意外的输出:-
switch(int){
case 1:
case 2:
}
省略break
会导致在执行case 1之后执行case 2。
您似乎遗漏了几个 break 语句。
Switch(X){
case 1: doOne();
case 2: doTwo();
case 3: doThree();
}
瀑布流确保如果 X 为 2,则 doTwo 和 doThree 都将被执行。如果X为1,三个方法都会被执行。
如果只想调用链接方法,将代码改成:
Switch(X){
case 1: doOne(); break;
case 2: doTwo(); break;
case 3: doThree(); break;
}