Android: Causado por: android.os.NetworkOnMainThreadException
String response = getResultForRequest(url);
Donde 'url' tiene formato JSON que devuelve un montón de datos utilizando el método http GET.
public static String getResultForRequest(String urlString) throws IOException { URL url = new URL(urlString); HttpURLConnection urlConnection = (HttpURLConnection) url .openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setDoInput(true); urlConnection.setDoOutput(true); urlConnection.connect(); InputStream is = urlConnection.getInputStream(); if (is == null) return null; StringBuffer sb = new StringBuffer(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; try { while ((line = br.readLine()) != null) sb.append(line); } finally { br.close(); is.close(); } return sb.toString(); }
No puedo buscar los datos formateados de JSON de 'url' que he pasado en el método de getResultForRequest (url). Conseguí un error en urlConnection.connect (); . El permiso de Internet también se da en el archivo AndroidManifest.xml.
- Android Log.X no imprime stacktrace
- Excepción extraña: no se puede emitir cadena a booleano cuando se utiliza getBoolean
- Uso de la gestión de excepciones globales con "setUncaughtExceptionHandler" y "Toast"
- Problemas para escribir la memoria interna de Android
- ¿El mensaje de excepción es nulo?
Aquí está mi registro.
10-09 13:27:35.264: E/AndroidRuntime(9984): FATAL EXCEPTION: main 10-09 13:27:35.264: E/AndroidRuntime(9984): java.lang.RuntimeException: Unable to start activity ComponentInfo{}: android.os.NetworkOnMainThreadException 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.app.ActivityThread.access$600(ActivityThread.java:140) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.os.Handler.dispatchMessage(Handler.java:99) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.os.Looper.loop(Looper.java:137) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.app.ActivityThread.main(ActivityThread.java:4898) 10-09 13:27:35.264: E/AndroidRuntime(9984): at java.lang.reflect.Method.invokeNative(Native Method) 10-09 13:27:35.264: E/AndroidRuntime(9984): at java.lang.reflect.Method.invoke(Method.java:511) 10-09 13:27:35.264: E/AndroidRuntime(9984): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008) 10-09 13:27:35.264: E/AndroidRuntime(9984): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775) 10-09 13:27:35.264: E/AndroidRuntime(9984): at dalvik.system.NativeStart.main(Native Method) 10-09 13:27:35.264: E/AndroidRuntime(9984): Caused by: android.os.NetworkOnMainThreadException 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) 10-09 13:27:35.264: E/AndroidRuntime(9984): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 10-09 13:27:35.264: E/AndroidRuntime(9984): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 10-09 13:27:35.264: E/AndroidRuntime(9984): at java.net.InetAddress.getAllByName(InetAddress.java:214) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 10-09 13:27:35.264: E/AndroidRuntime(9984): at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 10-09 13:27:35.264: E/AndroidRuntime(9984): at com.csoft.foursquare.FoursquareService.getResultForRequest(Service.java:564) 10-09 13:27:35.264: E/AndroidRuntime(9984): at com.csoft.foursquare.FoursquareService.getUserDetails(Service.java:376) 10-09 13:27:35.264: E/AndroidRuntime(9984): at com.csoft.checkin.CheckinHistoryActivity.onCreate(HistoryActivity.java:52) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.app.Activity.performCreate(Activity.java:5206) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 10-09 13:27:35.264: E/AndroidRuntime(9984): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064) 10-09 13:27:35.264: E/AndroidRuntime(9984): ... 11 more
Gracias por adelantado.
- Problema en Handler con mensajes en android
- String codificada "row three", debería usar @string resource
- Cláusula Throws en el manejo de excepciones
- Android obtener el nombre de usuario de Gmail y la contraseña de administrador de cuenta
- Java.lang.VerifyError IllformedLocaleException
- Excepción SQLite: la base de datos está bloqueada
- Captura todas las excepciones de tipo de programación de Android
- Java.io.NotSerializableException incluso si implemento "Serializable"
Añadir esto en su onCreate ():
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);
Use lo anterior como una solución temporal. De lo contrario, utilice thread o asynctask.
Está intentando establecer una conexión de red en el subproceso principal (UI). Esto no se permite en Android ya que detendrá la interfaz de usuario completa hasta que obtenga una respuesta del servidor.
Intente utilizar AsyncTask o realizar la conexión en un subproceso independiente.
Espero que esto ayude.
NetworkOnMainThreadException: Excepción que se activa cuando una aplicación intenta realizar una operación de red en su subproceso principal.
Usted debe llamar al método en asynctask entonces sólo el código funcionará. Para evitarlo debe llamar a otro hilo. Por lo tanto asynctask es mejor.
http://android-developers.blogspot.in/2009/05/painless-threading.html
http://android-er.blogspot.in/2012/04/androidosnetworkonmainthreadexception.html
http://www.lucazanini.eu/2012/android/the-android-os-networkonmainthreadexception-exception/?lang=es
Aquí está un enlace que ilustra cómo usar asynctask
- Prueba de Fragmentos de Android
- La referencia a la entidad "f" debe terminar con el signo ";" Delimitador