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 nullを取得します

したがって、決して条件を満たしません。

別のスレッドでそれを呼び出し、完了するまで他のステートメントを待機させます

  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 に答える