2012-12-06 33 views
0

獲取服務器返回信息時,LOGCAT顯示1 2 3.結果爲1,5,6。如果語句判斷無法通過

當判斷語句是否有錯時。我認爲結果是1,但它仍然是錯誤的。

try { 
    URL url=new URL(urlstr); 
    URLConnection conn = null; 
    Log.i("Text", "1"); 
    try { 
     conn = url.openConnection(); 
     Log.i("Text", "2"); 
     InputStream in=conn.getInputStream(); 
     Log.i("Text", "3"); 
     byte[] buffer=new byte[in.available()]; 
     in.read(buffer); 
     String result=new String(buffer); 
     Log.i("Text", "result="+result); 
     if(result.equals("1")) 
     {  
      Log.i("Text", "4"); 
     } else { 
      Log.i("Text", "5"); 
     } 
     Log.i("Text", "6"); 
    } 
}         

我不知道爲什麼。任何人都可以幫我嗎?非常感謝。

+0

你的問題是什麼?你能清楚一點嗎? –

+1

這條線的結果是什麼? 'Log.i(「Text」,「result =」+ result);' –

回答

3

目前還不清楚你想實現什麼,但是這三條線有三個問題:

byte[] buffer=new byte[in.available()]; 
in.read(buffer); 
String result=new String(buffer); 
  1. 您應該差不多從未使用available()。相反,創建一個固定大小的緩衝區(這聽起來像你不期望太多的數據,所以只需一個小緩衝區就可以)。如果在調用available()時沒有可用數據會怎麼樣?你將會創建一個空數組 - 你肯定不想那麼做。
  2. 您忽略了InputStream.read()的返回值。 從來沒有這樣做。你不知道有多少數據被實際讀過。
  3. 您正在從byte[]創建String,但未指定編碼。不要這樣做。哪個編碼是數據實際上是使用?

我的猜測是,你要麼通過空數組中,你實際上讀超過一個字節。