0

AsncTaskにreturnステートメントを追加しましたが、それでも追加するように指示するエラーが発生します。この構文エラーを停止する唯一のコードスニペットは、catchステートメントの後にreturnステートメントを追加することですが、これは逆効果であり、プログラムのニーズに対応しておらず、必要な文字列にアクセスできません(チェックする必要があります)戻り値のOuputStreamがtrueに等しい場合。

コード:

@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

しかし、それは逆効果であり、プログラムのニーズに対応していません

さて、「プログラムのニーズ」とは何ですか?がスローされた場合の結果をどうしたいですか? IOExceptionそれは true、false、または例外でなければなりません - 現時点では、それらのどれでもありません。

ほとんどの場合、例外が発生するのを待つことをお勧めします... の場合、何も問題がなかったかのように実際に続行できますIOExceptionか?

補足として、これは醜いです:

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

使用するだけです:

return checkresult(result);

(そして理想的には、さまざまなメソッドと変数の名前を変更して、Java の命名規則に従ってください。)

booleanまた、ではなくreturn に変更することをお勧めし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

catch (IOException e)ブロック内に return ステートメントが必要です。コンパイラは、IOException をキャッチしたときに何を返すかを認識できません。

何かを返す (false) か、例外を再スローするかの 2 つの選択肢があります。

于 2012-08-03T12:41:57.840 に答える
0

returnにステートメントを追加する必要がありmethod 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 に答える