Fehlermeldung 'java.net.SocketException: Socket fehlgeschlagen: EACCES (Berechtigung verweigert)'

180

Ich erhalte die Fehlermeldung

java.net.SocketException: Socket fehlgeschlagen: EACCES (Berechtigung verweigert)

wenn ich versuche, den folgenden Code anzuwenden. Dies ist die Funktion, die ich aufrufe und die mir diese Ausnahme gibt.

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

Und das ist meine Manifestdatei:

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

Wie kann ich dieses Problem beheben?

Sniver
quelle
Überprüfen Sie mit Gerät oder Emulator?
Ponmalar

Antworten:

356

Versuche es mit,

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

anstatt,

<permission  android:name="android.permission.INTERNET"></permission>
user370305
quelle
1
+1. Auch wenn dies nichts mit dem eigentlichen Problem zu tun hat, aber: Vergessen Sie nicht, die richtige apk zu installieren, nachdem Sie diese Änderung vorgenommen haben ... Ich habe mich ausgetrickst, indem ich eine weitere Kopie der .apk in einem bestimmten Verzeichnis und aufbewahrt habe Ich habe vergessen, es mit dem neuen zu überschreiben, bevor ich es von dort aus installiere.
n611x007
Arbeitete für mich ab November 2013. Mit Eclipse können Sie die Datei AndroidManifest.xml mit dem ausgefallenen Editor bearbeiten, der über eine Registerkarte Berechtigungen verfügt. Fügen Sie eine Verwendungsberechtigung hinzu und wählen Sie diese Berechtigung aus dem Dropdown-Menü aus.
John
4
wichtig - Das Verwendungsberechtigungs-Tag muss vor dem Anwendungs-Tag in der Manifest-Datei stehen. Das hat es zumindest für mich behoben.
Oder Gal
39

Versuche dies:

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

Und du activity namesmusst so sein mit capital letters:

<activity android:name=".Addfriend"/>
    <activity android:name=".UpdateDetails"/>
    <activity android:name=".Details"/>
    <activity android:name=".Updateimage"/>
NagarjunaReddy
quelle
4
- Wenn Sie zusätzliche Informationen in der Antwort haben, dann posten Sie nur, wenn Sie dieselben wie bereits beantwortet haben, und unterstützen Sie diese Antwort.
user370305
1
@ user370305 Entschuldigung, meinst du, er sollte nur die zusätzlichen Informationen posten? Da ich nicht einheimisch bin, kann ich nicht herausfinden, was du meinst, aber ich würde gerne etwas über Meta-Sachen wissen.
n611x007
32

Versuch es.

<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
quelle
2
Für den Fall, dass sich noch jemand fragt, wo diese abgelegt werden sollen: Sie können sie vor <application
Tiw
19

Versuchen Sie, sich <uses-permission>außerhalb des <application>Tags zu bewegen .

Irshu
quelle
7

Das Deinstallieren der App auf dem Gerät und die anschließende Neuinstallation haben das Problem für mich behoben.

Versuchte alle anderen Optionen, nichts. Endlich diesen Beitrag gefunden . Dies erfolgt nach dem Hinzufügen der Berechtigung (unten) und dem Reinigen des Builds.

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

Es kann behoben werden, indem die Zeilen in die Android-Manifest-Datei eingefügt werden:

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

Geben Sie hier die Bildbeschreibung ein

Nikimo Jam
quelle
Herzlich willkommen! Bitte beachten Sie, dass die Politik ist , dass Fragen und Antworten in englischer Sprache werden müssen .
zsltg
0

Fügen Sie diesen Quellcode wie folgt zu Ihrer Java-Datei hinzu:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
CoderDream
quelle
5
Dies ist nicht die Antwort auf diese Frage, bei der es um fehlende Berechtigungen im Manifest geht. Und dies ist eine sehr schlechte Antwort auf das Problem, auf das es eine Antwort ist, dh NetworkOnMainThreadException.
Laalto
0

Möglicherweise müssen Sie AndroidStudio - Build - Clean ausführen

Wenn Sie das Manifest über das Dateisystem oder Git aktualisiert haben, werden die Änderungen nicht übernommen.

David A.
quelle
0

Wenn Sie einen Emulator zum Testen verwenden, müssen Sie ihn <uses-permission android:name="android.permission.INTERNET" />nur verwenden und ignorieren. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />Es funktioniert für mich.

Jerin Raj
quelle