2013-10-09 36 views
5

現在、私はHTTPRequestを使用していますが、すべて正常に動作しています。 しかし、私は私がたっ時間を使用しますが、正直なところ、それがタイムアウトして、独自の時間がかかるし、それはそれよりも小さくない40秒で話して、次のシナリオ接続タイムアウト

Device is connected to wifi but wifi is not connected to internet

を扱いたいです。リクエストのためのコードは以下の通りです:少しの助けを必要とする今、私は何をする必要があるか

10-09 10:42:00.845: W/System.err(6052): java.net.UnknownHostException: Unable to resolve host "xxx.xxx.com": No address associated with hostname 
    10-09 10:42:00.850: W/System.err(6052):  at java.net.InetAddress.lookupHostByName(InetAddress.java:424) 
    10-09 10:42:00.850: W/System.err(6052):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
    10-09 10:42:00.855: W/System.err(6052):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
    10-09 10:42:00.855: W/System.err(6052):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
    10-09 10:42:00.855: W/System.err(6052):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
    10-09 10:42:00.860: W/System.err(6052):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
    10-09 10:42:00.860: W/System.err(6052):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
    10-09 10:42:00.860: W/System.err(6052):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670) 
    10-09 10:42:00.860: W/System.err(6052):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509) 
    10-09 10:42:00.865: W/System.err(6052):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
    10-09 10:42:00.870: W/System.err(6052):  at com.putitout.Utils.Network.doHttpGetWithCode_1(Network.java:363) 
    10-09 10:42:00.875: W/System.err(6052):  at com.putitout.GREEGS.Rewards.RewardHomeScreen$18.run(RewardHomeScreen.java:1157) 
    10-09 10:42:00.880: W/System.err(6052): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 
    10-09 10:42:00.880: W/System.err(6052):  at libcore.io.Posix.getaddrinfo(Native Method) 
    10-09 10:42:00.885: W/System.err(6052):  at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 
    10-09 10:42:00.885: W/System.err(6052):  at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 
    10-09 10:42:00.885: W/System.err(6052):  ... 11 more 
    10-09 10:42:00.890: W/System.err(6052): Caused by: libcore.io.ErrnoException: getaddrinfo failed: ETIMEDOUT (Connection timed out) 
    10-09 10:42:00.890: W/System.err(6052):  ... 14 more 

特定の間隔で実行されるタイマーを追加することです:私は次の応答を得た強調したシナリオを実行した後

public String[] doHttpGetWithCode_1(String url, String headerParam) throws Exception { 


     weburl   = new URL(url); 
     uri   = new URI(weburl.getProtocol(), weburl.getUserInfo(), weburl.getHost(), weburl.getPort(), weburl.getPath(), weburl.getQuery(), weburl.getRef()); 
     result   = new String[2]; 
     httpParameters = new BasicHttpParams(); 
      // Set the timeout in milliseconds until a connection is established. 
     timeoutConnection = 3000; 
     HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
      // Set the default socket timeout (SO_TIMEOUT) 
      // in milliseconds which is the timeout for waiting for data. 
     timeoutSocket = 3000; 
     HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
     httpURL=(HttpURLConnection) weburl.openConnection(); 
     httpURL.setDoOutput(true); 
     httpURL.setDoInput(true); 
     httpURL.setRequestMethod("GET"); 
     client   =new DefaultHttpClient(httpParameters); 
     httpget = new HttpGet(url); 
     httpget.addHeader("Content-Type", "application/json"); 
     httpget.addHeader("Authorization", "Basic " + Base64.encodeToString(("greggs:sausage123").getBytes(),Base64.NO_WRAP)); 
     httpget.addHeader("X-Auth-Signature", headerParam); 
     httpget.setParams(httpParameters); 

     try{ 
      response = client.execute(httpget); 
      entity  = response.getEntity(); 
      is   = entity.getContent(); 
//   BufferedReader br = new BufferedReader(new InputStreamReader(in); 
      reader  = new BufferedReader(new InputStreamReader(is, HTTP.UTF_8)); 
      sb   = new StringBuilder(); 
      line  = null; 

       try { 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         is.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
     } 
     catch(ClientProtocolException CPE) 
     { 
      CPE.printStackTrace(); 
     } 


      result[0] = response.getStatusLine().getStatusCode()+""; 
      result[1] = sb.toString(); 
      return result; 
     } 

は、この上に ご注意いただきありがとうございます。

答えて

-1

だけ

<uses-permission android:name="android.permission.INTERNET" /> 
を発揮するには権限を追加