2012-08-03 162 views
0

我已經向AsncTask添加了一條return語句,但我仍然收到一條錯誤消息,告訴我要添加一條語句。停止這個語法錯誤的唯一代碼片斷是在catch語句之後添加一個return語句,但這是反效果的,並且不能解決程序的需求,我無法訪問我需要的字符串(我需要檢查如果返回OuputStream是等於真正catch語句之前的返回語句

代碼:

@Override 
    protected Boolean doInBackground(String... userandpass) { //I still get an error telling me to add a return statement 
     // TODO Auto-generated method stub 
     URL url; 
     try { 
      url = new URL("http://127.0.0.1:1337"); 
      HttpURLConnection URLconnection = (HttpURLConnection) url.openConnection(); 
      URLconnection.setDoOutput(true); 
      URLconnection.setChunkedStreamingMode(0); 

      //output stream 
      OutputStream out = new BufferedOutputStream(URLconnection.getOutputStream()); 
      writestream(out, userandpass); 

      //buffered server response 
      InputStream in = new BufferedInputStream(URLconnection.getInputStream()); 
      String result = readstream(in); 
      Log.e(result, result); 

      // check we haven't been redirected (Hotel Wifi, for example). 
      checkrediect(URLconnection, url); 

      Boolean result_true = checkresult(result); 

      if(result_true) { 
       return true; 
      } else { 
       return false; 
      } 



     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return false; 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
+0

如果(result_true)返回true;否則返回false;'和return result_true'返回值相同,除去'result_true'上多餘的檢查並在結尾添加'return result_true;' – 2012-08-03 12:43:46

+3

。 – Dahaka 2012-08-03 12:44:44

+0

從第一眼看,我會說,第二個catch-block是缺少return語句的執行路徑。 – jayeff 2012-08-03 12:41:29

回答

11

但這是適得其反,不解決方案的需求

那麼什麼是「需求的程序「?你是什麼想要結果是如果IOException被拋出?它必須是真實的,虛假的或者是一個例外 - 目前,這些都不是。

我建議的時候,你只是讓異常冒泡......可你居然繼續彷彿什麼都沒有在IOException的情況下出了問題?

作爲一個側面說明,這是醜陋的:

if(result_true) { 
    return true; 
} else { 
    return false; 
} 

只需使用:

return checkresult(result); 

(理想情況下重命名的各種方法和變量遵循Java命名約定。)

我還建議將其更改爲返回boolean而不是Booelean

+0

我知道如果IOException被調用,函數必須是false,但是如何檢查字符串是否爲真? – TheBlueCat 2012-08-03 12:43:41

+0

爲什麼不給這些catch塊內的result_true賦值,並在方法結尾處返回result_true? – 2012-08-03 12:45:20

+0

@srikanthyaradla所以,我檢查結果,然後在catch塊後添加一個return語句? – TheBlueCat 2012-08-03 12:48:43

0

您必須在method block中添加return聲明。

做這樣的....

protected Boolean doInBackground(String... userandpass) { 

boolean isOk = false; 

// Your code 

if(result_true) { 
       isOk = true; 

      } else { 

       isOk = false; 
      } 

return isOk; 

} 
+1

你爲什麼要檢查'result_true'?你可以返回它... – Dahaka 2012-08-03 12:46:41

+0

從if-else塊內返回布爾變量result_true不會被視爲方法的返回...所以我設置另一個變量isOk被返回到塊外 – 2012-08-03 15:05:19

2
} catch (MalformedURLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    return false; 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    return false; 
} 
6

你有你的catch語句既沒有返回值,也不拋出異常的一個分支。

} catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

該塊需要有某種形式的代碼將返回的東西,否則該方法將無法正常工作。

0

您必須在catch (IOException e)塊中有return語句。當您捕獲IOException時,編譯器無法知道要返回什麼。

您有2個選擇,返回某些內容(false)或重新拋出異常。