0

我已经向我的 AsncTask 添加了一个 return 语句,但我仍然收到一个错误,告诉我添加一个。停止此语法错误的唯一代码片段是在 catch 语句之后添加一个 return 语句,但这会适得其反,不能满足程序的需求,而且我无法访问我需要的字符串(我需要检查如果返回的输出流等于真。

代码:

@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();
        }

    }
4

5 回答 5

11

但这会适得其反,并且不能满足程序的需求

那么什么是“程序的需求”?如果抛出an你希望结果是什么?IOException它必须是真、假或例外——目前,这些都不是。

我建议大多数时候,你只是让异常冒出来......你真的可以继续进行,就好像在的情况下没有任何问题IOException

作为旁注,这很丑陋:

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

只需使用:

return checkresult(result);

(理想情况下,重命名各种方法和变量以遵循 Java 命名约定。)

我还建议将其更改为 returnboolean而不是Booelean.

于 2012-08-03T12:39:30.260 回答
6

您的 catch 语句有一个既不返回值也不引发异常的分支。

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

那里的那个块需要有某种形式的代码来返回一些东西,否则该方法将无法正常运行。

于 2012-08-03T12:40:06.737 回答
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;
}
于 2012-08-03T12:40:06.170 回答
0

您必须returnmethod block.

像这样做....

protected Boolean doInBackground(String... userandpass)  { 

boolean isOk = false;

// Your code

if(result_true) {
                isOk = true;

            } else {

                isOk = false;
            }

 return isOk;

 }
于 2012-08-03T12:39:42.637 回答
0

您必须在catch (IOException e)块中有一个 return 语句。当您捕获 IOException 时,编译器不知道要返回什么。

你有 2 个选择,返回一些东西(假),或者重新抛出异常。

于 2012-08-03T12:41:57.840 回答