2013-10-09 16 views
5

In questo momento sto usando HTTPRequest ogni cosa funziona correttamente. ma voglio gestire il seguente scenarioTimeout connessione

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

Sto usando il tempo collegamento a fuori, ma onestamente parlando ci vuole il suo tempo di timeout e che è di 40 secondi non inferiore a quello. Codice in materia di richiesta è la seguente:

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

Dopo aver eseguito lo scenario evidenziato ho ottenuto la seguente risposta:

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 

Ora quello che dobbiamo fare è aggiungere timer che corre per l'intervallo specifico bisogno di un piccolo aiuto su questo grazie in anticipo per la vostra attenzione.

risposta

-1

Basta aggiungere l'autorizzazione a manifestare

<uses-permission android:name="android.permission.INTERNET" /> 
Problemi correlati