2012-02-04 11 views
1

私はサーバーからデータを受け取るAndroidアプリを書いています。理論的にはインターネット接続ができないので、SocketTimeoutExceptionをキャッチして再試行画面やその他のエラーメッセージを表示してこのケースをキャッチしようとします。残念ながら、この例外はスローされません。少なくとも、catch節には飛びません。私は間違って何をしていますか?SocketTimeoutExceptionが発生しましたが、スローされませんでしたか?

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 
    } 
} 

答えて

1

また、接続タイムアウトを設定する必要があります。 Please see this documentation.

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

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

+0

ありがとう、私はこれらのセッターを混合:) – Bevor

関連する問題