Messaggio di errore "java.net.SocketException: socket non riuscito: EACCES (autorizzazione negata)"


180

Ricevo il messaggio di errore

java.net.SocketException: socket non riuscito: EACCES (autorizzazione negata)

quando provo ad applicare il codice qui sotto. Questa è la funzione che chiamo e mi dà questa eccezione.

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

E questo è il mio file manifest:

<?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>

Come posso risolvere questo problema?


Stai controllando con dispositivo o emulatore?
Ponmalar,

Risposte:


357

Prova con,

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

invece di,

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

1
+1. Inoltre, anche se questo non ha nulla a che fare con il problema reale, ma: non dimenticare di installare l' apk giusto dopo aver apportato questa modifica ... Mi sono ingannato mantenendo un'altra copia di .apk in una directory distinta e ho dimenticato di sovrascriverlo con quello nuovo prima di installarlo da lì.
n611x007,

Ha funzionato per me dal nov 2013. Usando eclipse, puoi modificare AndroidManifest.xml con l'editor di fantasia che ha una scheda Autorizzazioni. Aggiungi un'autorizzazione di utilizzo e scegli questa autorizzazione dal menu a discesa.
giovedì

4
importante: il tag di autorizzazione usi deve trovarsi prima del tag dell'applicazione nel file manifest. questo è quello che l'ha risolto per me almeno ..
O Gal

39

Prova questo:

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

E il tuo activity namesdeve essere così con capital letters:

<activity android:name=".Addfriend"/>
    <activity android:name=".UpdateDetails"/>
    <activity android:name=".Details"/>
    <activity android:name=".Updateimage"/>

4
- Se hai ulteriori informazioni in risposta, pubblica solo se hai le stesse risposte già fornite, quindi supporta quella risposta.
user370305

1
@utente370305 mi scusi, vuoi dire che dovrebbe solo pubblicare le informazioni aggiuntive? non essendo nativo, non riesco a capire cosa volevi dire, ma mi piacerebbe conoscere le cose meta.
n611x007,

32

Provalo.

<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" />

2
Nel caso qualcuno si stia ancora chiedendo dove metterli: puoi inserirli in manifest / AndroidManifest.xml, prima di <applicazione
Tiw

19

Prova a spostarti <uses-permission>all'esterno del <application>tag.


7

La disinstallazione dell'app sul dispositivo e la reinstallazione l'hanno riparata per me.

Ho provato tutte le altre opzioni, niente. Finalmente trovato questo post . Ciò avviene dopo aver aggiunto l'autorizzazione (sotto) e aver pulito la build.

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


0

Aggiungi quel codice sorgente al tuo file Java come di seguito:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

5
Questa non è la risposta a questa domanda che riguarda il mancato permesso in manifest. E questa è una pessima risposta al problema a cui è una risposta, vale a dire NetworkOnMainThreadException.
Laalto,

0

Potrebbe essere necessario eseguire AndroidStudio - Build - Clean

Se hai aggiornato manifest tramite il filesystem o Git, questo non rileverà le modifiche.


0

Se si utilizza un emulatore per i test, è necessario utilizzare <uses-permission android:name="android.permission.INTERNET" />solo e ignorare <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />. Funziona per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.