2012-03-06 192 views
0

我發送一個用戶名和密碼到一個網站進行身份驗證的目的,畢竟說完了,我已經從服務器檢索結果,我已經把結果放在一個變量'響應'至此,一切工作正常如果語句沒有返回結果

response = sb.toString(); 
Toast.makeText(this,"Returned Value: "+ response,0).show(); 

上面Toast中看到的值是php腳本返回的值。我使用了有效用戶和無效用戶,上面顯示的Toast顯示了服務器返回的正確值(即「Good Login」或「Login Failed」)。我想測試這些結果,所以我可以「if」語句

if("Good Login".equals(response)){ 
Toast.makeText(this, "Registered User" + mUsername, 0).show(); 
} 
if("Login Failed".equals(response)){ 
Toast.makeText(this, "Sorry You're Not A Registered Subscriber",0).show(); 
} 

我從任何一個得到什麼啓動相應的活動,所以我已經把一些測試。 我也試着

if(response.equals("Good Login")){ 
Toast.makeText(this, "Registered User" + mUsername, 0).show(); 
} 
if(response.equals("Login Failed")){ 
Toast.makeText(this, "Sorry You're Not A Registered Subscriber",0).show(); 
} 

具有相同的結果。不知道還有什麼要測試。有沒有更好的方法來測試成功或失敗?

由於

+1

您是否調試過您的代碼以查看返回時的**響應**? – bschultz 2012-03-06 20:49:50

+1

您是否嘗試過檢查響應的實際值?它是「好登錄」還是「登錄失敗」之一?它可能是一個未修剪的字符串?如「好登錄」或「登錄失敗」? – 2012-03-06 20:49:52

+0

這可能是一個編碼問題,看看這個問題:http://stackoverflow.com/questions/4210713/equal-and-equalsignorecase-return-false-for-equal-strings – MByD 2012-03-06 20:50:13

回答

2

調試(或打印)的變量response的精確值。

很可能有空格,所以你可能需要有response = response.trim()

+0

這是修剪(),一旦我修剪它,一切正常 謝謝 – Hank 2012-03-06 20:55:18

+0

@Hank好。請記住將答案標記爲已接受。還記得調試你的程序,如果他們不工作;) – Bozho 2012-03-06 21:02:55

+0

@Hank - 當你輸出像你的Toast.makeText(this,「返回值:」+響應,0).show();'它有助於用一些東西圍繞輸出字符串 - 我使用方括號 - 'Toast.makeText(this,「Returned Value:[」+ response +「]」,0).show();'然後你會看到前導和尾隨空白。 – 2012-03-07 01:02:47

0
  1. 我將返回一個整數錯誤代碼,而不是一些字符串來檢查錯誤響應。
  2. 確保你返回正確的情況下,否則使用equalsIgnoreCase
0

java字符串處理函數等於完全的情況下/間距比較敏感。

所以如果:response = "Good Login "或者它包含額外空格或非打印字符,那麼它將通過測試。

這將是一個好主意,去除所有的空白,甚至是內部的空白。 Here's關於這麼做的SO問題。在進行實際比較時也使用String.equalsCaseInsesitive()