2013-03-29 79 views
0

我正在嘗試爲我的應用創建一個自定義搜索欄,它工作正常,但我需要包含一個if/else語句讓我的用戶知道用戶他搜索不存在。我嘗試實現一個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; 
} 
+1

我幾乎可以肯定''foundplayer'是''「',這就是爲什麼'if'條件不被滿足的原因。你調試了嗎?調試器是你的朋友。 – Maroun

+2

請改爲使用Username.equalsIgnoreCase(foundplayer.trim())。 – dannyroa

+0

@Cranosaur你確定你正在獲取用戶名嗎? – Pragnani

回答

0

首先確保您的getUsername()方法返回值.. 如果返回值,然後做這樣的。

String foundplayer = db.getUsername(); 

這將需要一段時間來處理,因爲它涉及到從數據庫中獲取數據,以便你的編譯器不會等待它完成,因爲編譯器會去,如果條件完成getUsername()方法之前。所以你會得到你的foundplayer null

所以它永遠不會滿足條件。

這麼叫,在一個單獨的線程,讓其他的語句等待,直到它完成

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

equals是區分大小寫的嘗試equalsIgnoreCase

+0

是什麼讓你認爲'db.getUsername()'是異步的?我在這裏錯過了什麼嗎? – jahroy

+0

@jahroy可能是我..因爲我開始開發android應用程序時遇到了這種奇怪的情況。在哪裏我已經爲數據庫調用賦值了一個返回值的方法。由於我的數據庫涉及巨大的數據,所以需要時間,每次我都得到空值。所以我所做的就是在一個單獨的線程中調用它,並停止當前線程,直到操作完成。 – Pragnani

+0

是的,這對我有用,謝謝! – Cranosaur

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

對於這個問題,這是毫無意義的,從該函數返回的用戶名,因爲主叫方已經知道什麼名字被搜索。你最好還是返回一個布爾值。