este error es realmente realmente extraño y no sé cómo reproducirlo y cómo solucionarlo porque hice muchas búsquedas pero nada fue útil.
Aquí está el stacktrace:
Stack Trace
_________________________________
0 java.lang.RuntimeException: An error occured while executing doInBackground()
1 at android.os.AsyncTask$3.done(AsyncTask.java:299)
2 at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
3 at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
4 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
5 at java.util.concurrent.FutureTask.run(FutureTask.java:137)
6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
8 at java.lang.Thread.run(Thread.java:856)
9 Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
10 at java.net.InetAddress.lookupHostByName(InetAddress.java:430)
11 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
12 at java.net.InetAddress.getAllByName(InetAddress.java:214)
13 at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
14 at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
15 at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
16 at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
17 at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
18 at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
19 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
20 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
21 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
22 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
23 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
24 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
25 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
26 at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
27 at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
28 at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
29 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
30 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
31 at android.os.AsyncTask$2.call(AsyncTask.java:287)
32 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
33 ... 4 more
34 Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
35 at libcore.io.Posix.getaddrinfo(Native Method)
36 at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
37 at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
38 ... 26 more
39 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
40 ... 29 more
41 java.lang.SecurityException: Permission denied (missing INTERNET permission?)
42 at java.net.InetAddress.lookupHostByName(InetAddress.java:430)
43 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
44 at java.net.InetAddress.getAllByName(InetAddress.java:214)
45 at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
46 at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
47 at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
48 at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
49 at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
50 at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
51 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
52 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
53 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
54 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
55 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
56 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
57 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
58 at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
59 at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
60 at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
61 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
62 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
63 at android.os.AsyncTask$2.call(AsyncTask.java:287)
64 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
65 at java.util.concurrent.FutureTask.run(FutureTask.java:137)
66 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
67 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
68 at java.lang.Thread.run(Thread.java:856)
69 Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
70 at libcore.io.Posix.getaddrinfo(Native Method)
71 at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
72 at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
73 ... 26 more
74 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
75 ... 29 more
76 libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
77 at libcore.io.Posix.getaddrinfo(Native Method)
78 at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
79 at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
80 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
81 at java.net.InetAddress.getAllByName(InetAddress.java:214)
82 at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
83 at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
84 at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
85 at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
86 at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
87 at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
88 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
89 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
90 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
91 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
92 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
93 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
94 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
95 at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
96 at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
97 at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
98 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
99 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
100 at android.os.AsyncTask$2.call(AsyncTask.java:287)
101 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
102 at java.util.concurrent.FutureTask.run(FutureTask.java:137)
103 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
104 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
105 at java.lang.Thread.run(Thread.java:856)
106 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
107 ... 29 more
108 libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
109 at libcore.io.Posix.getaddrinfo(Native Method)
110 at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
111 at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
112 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
113 at java.net.InetAddress.getAllByName(InetAddress.java:214)
114 at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
115 at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
116 at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
117 at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
118 at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
119 at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
120 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
121 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
122 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
123 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
124 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
125 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
126 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
127 at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
128 at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
129 at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
130 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
131 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
132 at android.os.AsyncTask$2.call(AsyncTask.java:287)
133 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
134 at java.util.concurrent.FutureTask.run(FutureTask.java:137)
135 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
136 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
137 at java.lang.Thread.run(Thread.java:856)
Aquí está mi AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my_app_package"
android:installLocation="auto"
android:versionCode="my_version_code"
android:versionName="my_version_name" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<uses-feature android:glEsVersion="0x00010001" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowTaskReparenting="true"
android:debuggable="true"
android:icon="@drawable/mxm_icon"
android:label="@string/musicbrowserlabel"
android:theme="@style/Theme.Music" >
<!-- MY ACTIVITIES -->
</application>
</manifest>
Por favor, no se moleste en preguntarme si tengo el permiso de INTERNET correcto en mi manifiesto porque esta aplicación está en el mercado desde hace 2 años: P
También he notado que (de Crittercism) todos los errores provienen de la versión de Android 4.1.x (JB). No sé si el dispositivo está rooteado o qué (no puedo ver esta información por el momento)
Respuestas:
NOTA: Escribí esta respuesta en junio de 2013, por lo que hoy en día está un poco anticuada. Muchas cosas cambiaron en la plataforma Android desde la versión 6 (Marshmallow), haciendo que todo el problema sea más / menos obsoleto hoy en día. Sin embargo, creo que vale la pena leer esta publicación como ejemplo de enfoque de análisis de problemas generales.
La excepción que obtiene (
SecurityException: Permission denied (missing INTERNET permission?)
) indica claramente que no está autorizado a trabajar en red. Ese es un hecho bastante indiscutible. Pero, ¿cómo puede suceder esto? Por lo general, se debe a que falta una<uses-permission android:name="android.permission.INTERNET" />
entrada en suAndroidManifest.xml
archivo o, dado que el permiso de Internet se otorga en la instalación, no en el tiempo de ejecución, por un error perdido de larga data en el marco de Android que hace que su aplicación se instale correctamente, pero sin la concesión de permiso esperada.Mi manifiesto es correcto, entonces, ¿cómo puede suceder esto?
Teóricamente, la presencia de
uses-permission
en Manifest cumple perfectamente con el requisito y, desde el punto de vista del desarrollador, es todo lo que se necesita para poder trabajar en red. Además, dado que los permisos se muestran al usuario durante la instalación, el hecho de que su aplicación termine instalada en el dispositivo del usuario significa que él / ella otorgó lo que solicitó (de lo contrario, la instalación se cancela), así que suponga que si su código se ejecuta, entonces todos los permisos solicitados son concedido es válido. Y una vez otorgado, el usuario no puede revocar el permiso de otra manera que desinstalar la aplicación por completo, ya que el marco estándar de Android (de AOSP) no ofrece tal característica en este momento.Pero las cosas se ponen más complicadas si tampoco le importa que su aplicación se ejecute en dispositivos rooteados . Hay herramientas disponibles en Google Play que sus usuarios pueden instalar para controlar el permiso otorgado a las aplicaciones instaladas en tiempo de ejecución , por ejemplo: Permisos denegados y otros. Esto también se puede hacer con CyanogenMod , la marca del proveedor (es decir, LG) u otra ROM personalizada , con varios tipos de "administradores de privacidad" o herramientas similares.
Entonces, si la aplicación está bloqueada de cualquier manera, básicamente es bloqueada intencionalmente por el usuario y, de ser así, es realmente un problema mayor para el usuario en este caso (o él / ella no entiende qué hacen realmente ciertas opciones / herramientas y cuáles serían las consecuencias) que el tuyo, porque el SDK estándar (y la mayoría de las aplicaciones están escritas con ese SDK en mente) simplemente no se comporta de esa manera. Por lo tanto , dudo mucho que este problema ocurra en un dispositivo "estándar" no rooteado con ROM estándar (o de un proveedor como Samsung, HTC, Sony, etc.).
No quiero chocar ...
La administración de permisos y el bloqueo de organizaciones correctamente implementados deben lidiar con el hecho de que la mayoría de las aplicaciones pueden no estar listas para la situación en la que el acceso a ciertas funciones se otorga y no se puede acceder al mismo al mismo tiempo, ya que esto es una especie de contradicción cuando la aplicación usa manifiesto para solicitar acceso en el momento de la instalación. El control de acceso bien hecho debe hacer que todas las cosas funcionen como antes, y aún así limitar la usabilidad usando técnicas en el alcance del comportamiento esperado de la característica. Por ejemplo, cuando se otorga cierto permiso (es decir, GPS, acceso a Internet), dicha función puede estar disponible desde la perspectiva de la aplicación / usuario (es decir, puede encender el GPS o intentar conectarse), la implementación alterada no puede proporcionar datos reales: es decir, el GPS siempre puede no devolver coordenadas, como cuando estás en interiores o no tienes "fijo" de satélite. El acceso a Internet se puede otorgar como antes, pero no puede realizar una conexión exitosa ya que no hay cobertura de datos ni enrutamiento. Estos escenarios también deben esperarse en el uso normal, por lo tanto, las aplicaciones ya deben manejarlos. Como esto simplemente puede suceder durante el uso diario normal, cualquier bloqueo en tal situación probablemente debería estar relacionado con errores de la aplicación.
Carecemos de demasiada información sobre el entorno en el que se produce este problema para diagnosticar el problema sin adivinar, pero como tipo de solución, puede considerar usar setDefaultUncaughtExceptionHandler () para detectar tales excepciones inesperadas en el futuro y es decir, simplemente mostrar información detallada del usuario qué permiso su aplicación necesita en lugar de simplemente fallar. Tenga en cuenta que el uso de esto probablemente entrará en conflicto con herramientas como Crittercism, ACRA y otras, así que tenga cuidado si usa alguna de estas.
Notas
Tenga en cuenta que
android.permission.INTERNET
no es el único permiso relacionado con la red que puede necesitar declarar en el manifiesto para intentar establecer una red con éxito. TenerINTERNET
permiso otorgado simplemente permite que las aplicaciones abran sockets de red (que es un requisito fundamental para realizar cualquier transferencia de datos de red). Pero en caso de que su pila / biblioteca de red también desee obtener información sobre redes, también necesitaráandroid.permission.ACCESS_NETWORK_STATE
en su Manifiesto (es decir, requerido por el cliente HttpUrlConnection ( ver tutorial ).Anexo (2015-07-16)
Tenga en cuenta que Android 6 (también conocido como Marshmallow) introdujo un mecanismo de administración de permisos completamente nuevo llamado Permisos en tiempo de ejecución . Le da al usuario más control sobre qué permisos se otorgan (también permite la concesión selectiva) o permite revocar permisos ya otorgados sin necesidad de eliminar la aplicación:
Sin embargo, los cambios no afectan
INTERNET
oACCESS_NETWORK_STATE
permisos, que son considerados permisos "normal". El usuario no necesita otorgar explícitamente estos permisos.Consulte la página de descripción de cambios de comportamiento para obtener detalles y asegúrese de que su aplicación también se comporte correctamente en los sistemas más nuevos. Es especialmente importante cuando su proyecto se establece
targetSdk
al menos23
como entonces debe admitir un nuevo modelo de permisos ( documentación detallada ). Si no está listo, asegúrese de mantenerlo comotargetSdk
máximo,22
ya que esto asegura que incluso el nuevo Android usará el sistema de permisos anterior cuando se instale su aplicación.fuente
Asegúrese de que el lugar donde está agregando
es correcto.
Deberías escribirlo así en AndroidManifest.xml:
No cometas mis errores :)
fuente
Android Studio 1.3b1 (no estoy seguro de otras versiones) completó automáticamente mi permiso de Internet para
ANDROID.PERMISSION.INTERNET
. Cambiarlo paraandroid.permission.INTERNET
solucionar el problema.fuente
Agregue al archivo de manifiesto la línea:
Me lo arregló.
fuente
Resolví este error, estaba agregando permisos dentro de la etiqueta de la aplicación por error. Puse afuera y funciona bien. Espero que ayude a alguien.
fuente
Yo también tuve este problema. era extraño que funcionara en mi emulador de piruletas, pero no en mi dispositivo kitkat real.
Android Studio ahora te obligará a escribir el permiso en mayúsculas, y ese es el problema.
Añadir
Encima de la pestaña de la aplicación y funcionará.
fuente
Escriba su permiso antes de la etiqueta de solicitud como se indica a continuación.
fuente
Ponga estos permisos fuera de la
<application>
etiqueta preferiblemente antes de la etiqueta, lo probé y funciona para mí.fuente
si era una dirección IPv6, eche un vistazo a esto: https://code.google.com/p/android/issues/detail?id=33046
Parece que hubo un error en Android que se corrigió en 4.3 (?).
fuente
Como mencionó Tom. Cuando empiece con capital
A
, la función de autocompletar lo completará como.Cuando comience a escribir con
a
, la función de autocompletar lo completará comoEl segundo es el correcto.
fuente
Pasé horas buscando una solución a este problema y ninguna de las soluciones en las respuestas funcionó. Luego descubrí que accidentalmente agregué un espacio durante el autocompletado entre
android.permission.INTERNET
y"
fuente
Bueno, es un tipo de error muy confuso. Podría haber muchas razones:
fuente
eliminar esto en su archivo de manifiesto
fuente