我正在编写一个应用程序,它接受两个用户输入并将它们与存储在数据库中的数据相匹配,并在TextView
中显示来自用户输入的相应数据(行)。
如果条件为真,则if语句完全独立。但是,如果添加else语句,即使条件为真也不会执行。
如果语句为true或false,则始终执行else语句
protected void onPostExecute(Void v) {
// ambil data dari Json database
try {
JSONArray Jarray = new JSONArray(result);
for (int i = 0; i < Jarray.length(); i++) {
JSONObject Jasonobject = null;
//text_1 = (TextView)findViewById(R.id.txt1);
Jasonobject = Jarray.getJSONObject(i);
//get an output on the screen
//String id = Jasonobject.getString("id");
String name = Jasonobject.getString("name");
String db_detail="";
if (et.getText().toString().equalsIgnoreCase(name)) {
db_detail = Jasonobject.getString("detail");
text.setText(db_detail);
break;
} else {
Toast.makeText(MainActivity.this, "Not available", Toast.LENGTH_LONG).show();
break;
}
}
this.progressDialog.dismiss();
答案 0 :(得分:2)
你永远不会完全依赖Jarray
。如果第一次迭代et.getText().toString().equalsIgnoreCase(name)
为false,并且执行了else分支,则立即break
。
try {
JSONArray Jarray = new JSONArray(result);
for(int i=0;i< Jarray.length(); i++) {
// other code
if(et.getText().toString().equalsIgnoreCase(name)) {
db_detail = Jasonobject.getString("detail");
text.setText(db_detail);
break;
}
}
if (TextUtils.isEmpty(db_detail)) {
// show toast
}
}
答案 1 :(得分:1)
使用flag变量检查用户是否可用,并在for循环后打印消息。
boolean available=false;
JSONArray Jarray = new JSONArray(result);
for(int i=0;i<Jarray.length();i++)
{
JSONObject Jasonobject = null;
//text_1 = (TextView)findViewById(R.id.txt1);
Jasonobject = Jarray.getJSONObject(i);
//get an output on the screen
//String id = Jasonobject.getString("id");
String name = Jasonobject.getString("name");
String db_detail="";
if(et.getText().toString().equalsIgnoreCase(name))
{
db_detail = Jasonobject.getString("detail");
text.setText(db_detail);
available=true;
break;
}
}
if(!available)
Toast.makeText(MainActivity.this, "Not available", Toast.LENGTH_LONG).show();
答案 2 :(得分:0)
您是否尝试过使用:
else if(!et.getText().toString().equalsIgnoreCase(name))