0

我正在尝试为我的应用程序创建一个自定义搜索栏,它工作正常,但我需要包含一个 if/else 语句,让我的用户知道他搜索的用户不存在。我尝试实现一个 if/else 语句但是当我尝试搜索数据库中的用户时,当我知道我输入了正确的用户名时,它会向我显示“找不到用户名”的 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;
}
4

2 回答 2

0

首先确保您的 getUsername() 方法返回值。如果它返回值,那么就这样做。

  String foundplayer = db.getUsername();

这将需要一些时间来处理,因为它涉及从数据库获取数据,因此您的编译器不会等待它完成,因为编译器将在完成 getUsername() 方法之前进入 if 条件。所以你会让你的foundplayer为空

所以它永远不会满足条件。

所以在一个单独的线程中调用它并让另一个语句等待它完成

  String foundplayer = "";
Thread t=new Thread()
{
public void run()
{
  foundplayer = db.getUsername();
}
};
t.start();
t.join();

或者

equals是否区分大小写equalsIgnoreCase

于 2013-03-29T21:57:31.857 回答
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 "";
}

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

于 2013-03-29T22:05:25.917 回答