Searchbar“if”语句一直显示“else”结果

时间:2013-03-29 21:40:38

标签: java android sqlite

我正在尝试为我的应用程序创建一个自定义搜索栏,但它工作正常但我需要包含一个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;
}

2 个答案:

答案 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 "";
}

就此而言,从该函数返回用户名是毫无意义的,因为调用者已经知道搜索了什么名称。你应该最好返回一个布尔值。