2017-05-27 2 views
0

EDIT: Ceci est exécuté dans AsyncTask, j'aurais dû le mentionner.Je reçois ANR en appelant URLconnection

J'ai reçu de nombreux ANR sur ce bloc de code:

URL url = new URL(sURL); 
     URLConnection connect = url.openConnection(); 
     connect.setConnectTimeout(R.integer.timeoutLengthWithACapitalT); 
     connect.setReadTimeout(R.integer.timeoutLengthWithACapitalT); 
     BufferedReader in = new BufferedReader(new InputStreamReader(connect.getInputStream())); //Problem Line 

R.integer.timeoutLengthWithACapitalT est 1000

Je ne sais pas ce qui cause, je crois qu'il devrait expirer. Cependant, j'obtiens une trace de pile pour ANR.

Stack Trace: https://pastebin.com/hwJhGfVX

+0

Vous ne devriez pas exécution de ce code sur le thread principal de l'application. – CommonsWare

+0

Comment avez-vous exécuté ceci sans une asynctask? –

+0

S'il vous plaît yous multithread –

Répondre

0

Vous devez exécuter votre appel réseau non thread principal. Je préfère utiliser AsyncTask pour tous les appels réseau. Vous pouvez utiliser ci-dessous l'extrait de code

private class MyAsyncTask extends AsyncTask<URL, Integer, Long> { 
    protected Long doInBackground(URL... urls) { 
     //your main network call code 
     return result; //this return will invoke onProgressCompleted 
    } 

    protected void onPreExecute() { 
     //network call in progress, you can show a loaded here if you want 
    } 

    protected void onPostExecute(Long result) { 
     //Once network call is completed 
    } 
} 

Vous pouvez également consulter Android Docs pour plus de détails https://developer.android.com/reference/android/os/AsyncTask.html

+0

Merci, j'ai oublié de mentionner que j'utilise Async donc ce n'est pas le problème. –

+0

@JonathanBurk Partagez votre erreur stack trace aussi – Arshad

+0

Je l'ai ajouté sur pastebin pour vous. J'ai plus si vous avez besoin, mais ils sont tous à peu près les mêmes. –