2012-02-26 9 views
5

Ho un problema che voglio analizzare un file XML sul web. Ora anche il mio HttpResponce ha troppo tempo per leggere quel file XML, quindi ottengo l'errore "Become Runtime Error" per le mie GUI.HttpResponse in Android

try { 

     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost("http://chukk.nuzoka.com/name.xml"); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 

     HttpEntity httpEntity = httpResponse.getEntity(); 
     line = EntityUtils.toString(httpEntity); 


    } catch (UnsupportedEncodingException e) { 
     line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
    } catch (MalformedURLException e) { 
     line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
    } catch (IOException e) { 
     line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
    } 

Ogni aiuto è apprezzato :)

+0

fare questo in un thread separato giusto? – L7ColWinters

+0

Solo una nota a margine, considera l'utilizzo di StreamReader invece di EntityUtils.toString, per un miglioramento dell'utilizzo della memoria. – yorkw

+0

@yorkw Hai qualcosa da sostenere? Sto usando EntityUtils .. – nhaarman

risposta

3

Come regola generale nella programmazione interfaccia utente, non solo Android, si dovrebbe passare ad un thread in background qualsiasi/tempo pesante compito di elaborazione.

Ci sono buone strutture per quello che ti aiuta a svolgere il compito lungo in background e postare i suoi risultati finali/intermedi al thread dell'interfaccia utente in Android, come ad esempio AsyncTask e Handlers.

1

In aggiunta a quanto Binyamin Sharet Detto questo, c'è un special mode è possibile utilizzare durante lo sviluppo che può prendere gli errori di progettazione di questo tipo.

StrictMode è più comunemente utilizzato per rilevare l'accesso accidentale al disco o alla rete sul thread principale dell'applicazione, dove vengono ricevute le operazioni dell'interfaccia utente e vengono eseguite le animazioni. Mantenere il disco e le operazioni di rete fuori dal thread principale rende le applicazioni molto più fluide e reattive. Mantenendo il thread principale dell'applicazione reattivo, si impedisce anche che le finestre di dialogo ANR vengano mostrate agli utenti.

1

Si desidera utilizzare una richiesta HTTP GET anziché un POST poiché non si pubblicano parametri sul server Web.

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpGet request = new HttpGet(); 
request.setURI(new URI("http://chukk.nuzoka.com/name.xml")); 
HttpEntity httpEntity = httpResponse.getEntity(); 
line = EntityUtils.toString(httpEntity); 
Problemi correlati