Mensaje de error 'java.net.SocketException: socket falló: EACCES (Permiso denegado)'

180

Me sale el mensaje de error

java.net.SocketException: error de socket: EACCES (permiso denegado)

cuando trato de aplicar el código a continuación. Esta es la función que llamo y me da esta excepción.

public void run() {
    // TODO Auto-generated method stub
    URL myurl = null;

    try {
        myurl = new URL("http://10.0.2.2/list.JSON");
    }
    catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        URLConnection myconn = myurl.openConnection();
        InputStream in = new BufferedInputStream(myconn.getInputStream());
        InputStreamReader reader = new InputStreamReader(in);
        BufferedReader br = new BufferedReader(reader);
        String line;
        StringBuilder sb = new StringBuilder();
        while ((line=br.readLine()) != null)
        {
            sb.append(line);
            //Toast.makeText(getApplicationContext(), "I enter here", Toast.LENGTH_LONG).show();
        }
        jsoncode = sb.toString();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    threading = true;
    super.run();
}

LogCat :

06-30 11:33:21.457: W/System.err(619): java.net.SocketException: socket failed: EACCES (Permission denied)
06-30 11:33:21.467: W/System.err(619):     at libcore.io.IoBridge.socket(IoBridge.java:573)
06-30 11:33:21.467: W/System.err(619):     at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
06-30 11:33:21.479: W/System.err(619):     at java.net.Socket.checkOpenAndCreate(Socket.java:663)
06-30 11:33:21.479: W/System.err(619):     at java.net.Socket.connect(Socket.java:807)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:77)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
06-30 11:33:21.487: W/System.err(619):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
06-30 11:33:21.487: W/System.err(619):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
06-30 11:33:21.497: W/System.err(619):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
06-30 11:33:21.497: W/System.err(619):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
06-30 11:33:21.497: W/System.err(619):     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
06-30 11:33:21.497: W/System.err(619):     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
06-30 11:33:21.497: W/System.err(619):     at com.apk.PItestActivity$connection.run(PItestActivity.java:190)
06-30 11:33:21.507: W/System.err(619): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
06-30 11:33:21.517: W/System.err(619):     at libcore.io.Posix.socket(Native Method)
06-30 11:33:21.517: W/System.err(619):     at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:169)
06-30 11:33:21.527: W/System.err(619):     at libcore.io.IoBridge.socket(IoBridge.java:558)
06-30 11:33:21.527: W/System.err(619):     ... 15 more

Y este es mi archivo de manifiesto:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.apk"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="14" />
    <permission android:name="android.permission.INTERNET"></permission>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".PItestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="addfriend"></activity>
        <activity android:name="updateDetails"></activity>
        <activity android:name="Details"></activity>
        <activity android:name="updateimage"></activity>
    </application>
</manifest>

¿Como puedo solucionar este problema?

Sniver
fuente
¿Estás comprobando con el dispositivo o el emulador?
Ponmalar

Respuestas:

357

Probar con

<uses-permission android:name="android.permission.INTERNET"/>

en vez de,

<permission  android:name="android.permission.INTERNET"></permission>
usuario370305
fuente
1
+1. Además, aunque esto no tiene nada que ver con el problema real, pero: no te olvides de instalar el apk correcto después de hacer este cambio ... Me he engañado al guardar otra copia del archivo .apk en un directorio distinto y olvidé sobrescribirlo con el nuevo antes de instalarlo desde allí.
n611x007
Trabajó para mí a partir de noviembre de 2013. Usando eclipse, puede editar AndroidManifest.xml con el elegante editor que tiene una pestaña Permisos. Agregue un Permiso de Usos y elija este permiso del menú desplegable.
jjohn
44
importante: la etiqueta de permiso de uso debe estar antes que la etiqueta de la aplicación en el archivo de manifiesto. eso es lo que me solucionó al menos ..
O Gal
39

Prueba esto:

<uses-permission android:name="android.permission.INTERNET"/>

Y activity namesdebes ser así con capital letters:

<activity android:name=".Addfriend"/>
    <activity android:name=".UpdateDetails"/>
    <activity android:name=".Details"/>
    <activity android:name=".Updateimage"/>
NagarjunaReddy
fuente
44
- Si tiene información adicional en la respuesta, solo publique si tiene la misma que ya respondió y luego respalde esa respuesta.
user370305
1
@ user370305 disculpe, ¿quiere decir que solo debe publicar la información adicional? no siendo nativo, no puedo entender lo que querías decir, pero me gustaría saber sobre cosas meta.
n611x007
32

intentalo.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Neeraj Singh
fuente
2
En caso de que alguien todavía se pregunte dónde colocarlos: puede ponerlos en manifiestos / AndroidManifest.xml, antes de <aplicación
Tiw
19

Intenta moverte <uses-permission>fuera de la <application>etiqueta.

Irshu
fuente
7

La desinstalación de la aplicación en el dispositivo y luego la reinstalación me lo arreglaron.

Intenté todas las otras opciones, nada. Finalmente encontré esta publicación . Esto es después de agregar el permiso (a continuación) y limpiar la compilación.

<uses-permission android:name="android.permission.INTERNET"/>
Gibolt
fuente
0

Agregue esos códigos fuente a su archivo Java como se muestra a continuación:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
CoderDream
fuente
55
Esta no es la respuesta a esta pregunta que trata sobre la falta de permiso en el manifiesto. Y esta es una muy mala respuesta al problema al que es una respuesta, es decir NetworkOnMainThreadException.
laalto
0

Puede que tenga que hacer AndroidStudio - Build - Clean

Si actualizaste el manifiesto a través del sistema de archivos o Git, no recogerá los cambios.

David A
fuente
0

Si está utilizando un emulador para la prueba, debe usar <uses-permission android:name="android.permission.INTERNET" />solo e ignorar <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />. Es trabajo para mí.

Jerin Raj
fuente