2012-08-03 218 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)或重新抛出异常。