esse erro é realmente muito estranho e não sei como reproduzi-lo e como consertá-lo porque fiz muitas pesquisas mas nada adiantou.
Aqui está o 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)
Aqui está meu 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>
Não se preocupe em me perguntar se tenho a permissão de INTERNET correta em meu manifesto porque este aplicativo está no mercado há 2 anos: P
Também notei que (do Crittercism) todos os bugs vêm da versão Android 4.1.x (JB). Não sei se o dispositivo está enraizado ou o quê (não consigo ver esta informação no momento)
Respostas:
NOTA: Eu escrevi esta resposta em junho de 2013, então ela está um pouco desatualizada atualmente. Muitas coisas mudaram na plataforma Android desde a versão 6 (Marshmallow), tornando todo o problema mais / menos obsoleto nos dias de hoje. No entanto, acredito que este post ainda pode valer a pena ser lido como um exemplo de abordagem de análise de problemas gerais.
A exceção que você está recebendo (
SecurityException: Permission denied (missing INTERNET permission?)
) indica claramente que você não tem permissão para fazer rede. Isso é um fato bastante indiscutível. Mas como isso pode acontecer? Normalmente, é devido à falta de<uses-permission android:name="android.permission.INTERNET" />
entrada em seuAndroidManifest.xml
arquivo ou, como a permissão de internet é concedida na instalação e não no tempo de execução, por bug perdido de longa data no framework Android que faz com que seu aplicativo seja instalado com sucesso, mas sem a concessão de permissão esperada.Meu Manifesto está correto, então como isso pode acontecer?
Teoricamente, a presença de
uses-permission
no Manifest atende perfeitamente ao requisito e, do ponto de vista do desenvolvedor, é tudo o que precisa ser feito para poder fazer networking. Além disso, uma vez que as permissões são mostradas ao usuário durante a instalação, o fato de seu aplicativo ter terminado instalado no dispositivo do usuário significa que ele concedeu o que você pediu (caso contrário, a instalação será cancelada), então suponha que, se seu código for executado, todas as permissões solicitadas serão concedido é válido. E, uma vez concedida, o usuário não pode revogar a permissão de outra forma que desinstalar o aplicativo completamente, já que a estrutura Android padrão (do AOSP) não oferece tal recurso no momento.Mas as coisas estão ficando mais complicadas se você também não se importar que seu aplicativo seja executado em dispositivos com acesso root . Existem ferramentas disponíveis no Google Play que seus usuários podem instalar para controlar as permissões concedidas aos aplicativos instalados em tempo de execução - por exemplo: Permissões negadas e outros. Isso também pode ser feito com CyanogenMod , marca do fornecedor (por exemplo, LG) ou outra ROM personalizada , apresentando vários tipos de "gerenciadores de privacidade" ou ferramentas semelhantes.
Portanto, se o aplicativo for bloqueado de qualquer maneira, ele é basicamente bloqueado intencionalmente pelo usuário e, em caso afirmativo, é realmente mais um problema do usuário neste caso (ou ele / ela não entende o que certas opções / ferramentas realmente fazem e quais seriam as consequências) do que o seu, porque o SDK padrão (e a maioria dos aplicativos são escritos com esse SDK em mente) simplesmente não se comporta dessa forma. Portanto, duvido muito que esse problema ocorra em dispositivos "padrão", sem acesso root, com ROM de estoque (ou de fornecedores como Samsung, HTC, Sony, etc.).
Eu não quero bater ...
O gerenciamento de permissões e o bloqueio / org devidamente implementados devem lidar com o fato de que a maioria dos aplicativos pode não estar pronta para a situação em que o acesso a certos recursos é concedido e não acessível ao mesmo tempo, pois isso é um tipo de contradição onde o aplicativo usa o manifesto para solicitar acesso no momento da instalação. O controle de acesso feito corretamente deve fazer todas as coisas funcionarem como antes e ainda limitar a usabilidade usando técnicas no escopo do comportamento esperado do recurso. Por exemplo, quando determinada permissão é concedida (ou seja, GPS, acesso à Internet), tal recurso pode ser disponibilizado da perspectiva do aplicativo / usuário (ou seja, você pode ligar o GPS ou tentar se conectar), a implementação alterada não pode fornecer dados reais - ou seja, o GPS sempre pode retornar sem coordenadas, como quando você está em um ambiente fechado ou não tem um satélite "fixo". O acesso à Internet pode ser concedido como antes, mas você não pode fazer nenhuma conexão com sucesso, pois não há cobertura de dados ou roteamento. Esses cenários também devem ser esperados no uso normal, portanto, eles já devem ser tratados pelos aplicativos. Como isso simplesmente pode acontecer durante o uso diário normal, qualquer travamento em tal situação deve estar relacionado a bugs de aplicativo.
Faltam muitas informações sobre o ambiente no qual este problema ocorre para diagnosticar o problema sem adivinhação, mas como tipo de solução, você pode considerar o uso de setDefaultUncaughtExceptionHandler () para capturar tais exceções inesperadas no futuro e simplesmente mostrar informações detalhadas do usuário que permissão que seu aplicativo precisa em vez de apenas travar. Observe que usar isso provavelmente entrará em conflito com ferramentas como Crittercism, ACRA e outras, portanto, tome cuidado ao usar qualquer uma delas.
Notas
Esteja ciente de que
android.permission.INTERNET
não é a única permissão relacionada à rede que você pode precisar declarar no manifesto para tentar fazer a rede com sucesso. Ter aINTERNET
permissão concedida simplesmente permite que os aplicativos abram sockets de rede (que é basicamente um requisito fundamental para fazer qualquer transferência de dados de rede). Mas no caso de sua pilha / biblioteca de rede também desejar obter informações sobre redes, você também precisaráandroid.permission.ACCESS_NETWORK_STATE
do seu Manifesto (isto é, exigido pelo cliente HttpUrlConnection ( consulte o tutorial ).Adendo (16/07/2015)
Observe que o Android 6 (também conhecido como Marshmallow) introduziu um mecanismo de gerenciamento de permissão completamente novo chamado Permissões de tempo de execução . Isso dá ao usuário mais controle sobre quais permissões são concedidas (também permite a concessão seletiva) ou permite revogar as permissões já concedidas sem a necessidade de remoção do aplicativo:
No entanto, as alterações não afetam
INTERNET
ouACCESS_NETWORK_STATE
permissões, que são considerados permissões "normal". O usuário não precisa conceder essas permissões explicitamente.Consulte a página de descrição de mudanças de comportamento para obter detalhes e certifique-se de que seu aplicativo também se comportará corretamente em sistemas mais novos. É especialmente importante quando seu projeto está definido
targetSdk
como pelo menos23
, pois você deve oferecer suporte a um novo modelo de permissões ( documentação detalhada ). Se você não estiver pronto, certifique-se de mantê-lotargetSdk
no máximo,22
pois isso garante que até mesmo o novo Android usará o sistema de permissão antigo quando seu aplicativo for instalado.fonte
Certifique-se de que o lugar onde você adiciona
está certo.
Você deve escrever assim em AndroidManifest.xml:
Não cometa meus erros :)
fonte
O Android Studio 1.3b1 (não tenho certeza sobre outras versões) completou automaticamente minha permissão de internet para
ANDROID.PERMISSION.INTERNET
. Alterá-lo paraandroid.permission.INTERNET
corrigir o problema.fonte
Adicione ao arquivo de manifesto a linha:
Ele consertou para mim.
fonte
Resolvi esse erro, estava adicionando permissões dentro da tag do aplicativo por engano. Eu coloquei fora e funciona bem. Espero que ajude para alguém.
fonte
Eu também tive esse problema. era estranho que funcionasse no meu emulador de pirulito, mas não no meu dispositivo kitkat real.
O Android Studio agora o forçará a escrever a permissão em maiúsculas e esse é o problema.
Adicionar
Acima da guia do aplicativo e ele funcionará.
fonte
Escreva sua permissão antes da tag do aplicativo conforme fornecido abaixo.
fonte
Coloque essas permissões fora da
<application>
tag de preferência antes da tag, tentei e funcionou para mim.fonte
se for um endereço IPv6, dê uma olhada em: https://code.google.com/p/android/issues/detail?id=33046
Parece que houve um bug no Android que foi corrigido no 4.3 (?).
fonte
Exatamente como Tom mencionou. Quando você começar com capital
A
, o preenchimento automático o concluirá como.Quando você começar a digitar com
a
, o preenchimento automático irá completá-lo comoO segundo é o correto.
fonte
Passei horas procurando uma solução para esse problema e nenhuma das soluções nas respostas funcionou. Então descobri que acidentalmente adicionei um espaço durante o preenchimento automático entre
android.permission.INTERNET
e"
fonte
Bem, é um tipo de bug muito confuso. Poderia haver muitas razões:
fonte
remova isso do seu arquivo de manifesto
fonte