1

サーバーからデータを受信する Android アプリを作成しています。理論的にはインターネット接続が存在しない可能性があるため、SocketTimeoutException をキャッチしてエラー メッセージや再試行画面などを表示することで、このケースをキャッチしようとします。残念ながら、この例外はスローされません。少なくとも、catch 句にはジャンプしません。私は何を間違っていますか?

public class HttpConnector {

    private String urlString;
    private int connectionTimeout = 5000; //milliseconds

    public HttpConnector(String urlString)  {
        this.urlString = urlString;
    }

    public String receiveData() throws PolizeiwarnungException {
        URL url = null;
        HttpURLConnection urlConnection = null;
        StringBuffer b = new StringBuffer();

        try {
            url = new URL(urlString);
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setReadTimeout(connectionTimeout);
            BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); //Here it gets stuck if there is no connection to the server

            String str;
            while ((str = reader.readLine()) != null) {
                b.append(str + "\n");
            }
        }
        catch (SocketTimeoutException e) {
            //TODO
            e.printStackTrace();
        }
        catch (IOException e) {
            throw new PolizeiwarnungException(e);
        } 
        finally {
            if (urlConnection != null)  {
                urlConnection.disconnect();
            }
        }

        return b.toString();
    }

    public void sendData(String data)  {
        //TODO
    }
}
4

1 に答える 1

1

接続タイムアウトも設定する必要があります。このドキュメントを参照してください。

エンドポイントが存在しないため、接続タイムアウトを設定しなければ、接続がタイムアウトすることはありません。

setConnectTimeout(int timeout) この URLConnection インスタンスが指すリソースへの接続を確立するためのタイムアウト値をミリ秒単位で設定します。

于 2012-02-04T11:26:18.423 に答える