我正在尝试为我的应用程序创建一个自定义搜索栏,但它工作正常但我需要包含一个if / else语句让我的用户知道他搜索的用户不存在。我尝试实现一个if / else语句但是当我尝试搜索我的数据库中的用户时,当我知道我输入了正确的用户名时,它会向我显示我的“用户名未找到”的其他声明。
根据我提供的代码,我想知道我做错了什么?
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String Username = sbar.getText().toString();
String foundplayer = db.getUsername();
if (Username.equals(foundplayer)) {
ResultFrame.setVisibility(View.VISIBLE);
ResultText.setText(foundplayer);
Toast.makeText(getApplicationContext(), "Player Found", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Username Not Found", Toast.LENGTH_LONG).show();
}
}
});
public String getUsername() {
String[] userName = new String[] { "USERNAME" };
Cursor c = db.query( "NFDB", null, null, null, null, null, null, null);
String result = "";
int iName = c.getColumnIndex("USERNAME");
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
result = c.getString(iName);
}
return result;
}
答案 0 :(得分:0)
首先确保你的getUsername()方法返回值.. 如果它返回值,那么就这样做。
String foundplayer = db.getUsername();
这需要一段时间来处理,因为它涉及从数据库获取数据,因此编译器不会等待它完成,因为编译器将在完成getUsername()方法之前转到if条件。所以你将把你的发现者变为空
所以它永远不会满足条件。
所以在一个单独的线程中调用它,让另一个语句等到它完成
String foundplayer = "";
Thread t=new Thread()
{
public void run()
{
foundplayer = db.getUsername();
}
};
t.start();
t.join();
或
equals
区分大小写try equalsIgnoreCase
答案 1 :(得分:0)
您的getUsername
函数实际上会从数据库中返回一些随机用户名。
您必须为其搜索用户名作为参数:
public String getUsername(String searchName) {
Cursor c = db.query("NFDB",
new String[] { "USERNAME" },
"USERNAME = ?",
new String[] { searchName },
null, null, null);
if (c.moveToNext())
return c.getString(0);
else
return "";
}
就此而言,从该函数返回用户名是毫无意义的,因为调用者已经知道搜索了什么名称。你应该最好返回一个布尔值。