Pesan kesalahan 'java.net.SocketException: socket gagal: EACCES (Izin ditolak)'


180

Saya mendapatkan pesan kesalahan

java.net.SocketException: socket gagal: EACCES (Izin ditolak)

ketika saya mencoba menerapkan kode di bawah ini. Ini adalah fungsi yang saya panggil dan memberi saya pengecualian ini.

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

Dan ini file manifes saya:

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

Bagaimana saya bisa memperbaiki masalah ini?


Apakah Anda memeriksa dengan Perangkat atau Emulator?
Ponmalar

Jawaban:


357

Coba dengan,

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

dari pada,

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

1
+1. Juga, meskipun ini tidak ada hubungannya dengan masalah aktual, tetapi: jangan lupa untuk menginstal apk yang tepat setelah Anda melakukan perubahan ini ... Saya telah menipu diri saya dengan menyimpan salinan .apk lain di direktori yang berbeda dan lupa menimpa dengan yang baru sebelum menginstal dari sana.
n611x007

Bekerja untuk saya sejak November 2013. Menggunakan eclipse, Anda dapat mengedit AndroidManifest.xml dengan editor mewah yang memiliki tab Izin. Tambahkan Izin Penggunaan dan pilih izin ini dari menu tarik-turun.
jjohn

4
penting - tag izin penggunaan harus sebelum tag aplikasi dalam file manifes. Itulah yang paling tidak memperbaikinya bagi saya ..
Atau Gal

39

Coba ini:

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

Dan Anda activity namesharus seperti ini dengan capital letters:

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

4
- Jika Anda memiliki informasi tambahan sebagai jawaban, maka hanya posting jika Anda sudah sama dengan yang sudah dijawab maka dukung jawaban itu.
user370305

1
@ user370305 permisi, apakah maksud Anda dia hanya boleh mengirim informasi tambahan? bukan asli, saya tidak tahu apa yang Anda maksud tapi saya ingin tahu tentang hal-hal meta.
n611x007

32

Cobalah.

<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
Jika seseorang masih bertanya-tanya di mana harus meletakkan ini: Anda dapat meletakkannya di manifes / AndroidManifest.xml, sebelum <application
Tiw

19

Coba pindahkan ke <uses-permission>luar <application>tag.


7

Menghapus instalasi aplikasi pada perangkat dan kemudian menginstal ulang memperbaikinya untuk saya.

Sudah mencoba semua opsi lain, tidak ada. Akhirnya ditemukan posting ini . Ini setelah menambahkan izin (di bawah) dan pembersihan.

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


0

Tambahkan kode sumber itu ke file Java Anda seperti di bawah ini:

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

5
Ini bukan jawaban untuk pertanyaan ini yaitu tentang tidak adanya izin dalam manifes. Dan ini adalah jawaban yang sangat buruk untuk masalah itu adalah jawaban, yaitu NetworkOnMainThreadException.
laalto

0

Anda mungkin perlu melakukan AndroidStudio - Build - Clean

Jika Anda memperbarui manifes melalui sistem file atau Git, itu tidak akan mengambil perubahan.


0

Jika Anda menggunakan emulator untuk pengujian maka Anda harus menggunakan <uses-permission android:name="android.permission.INTERNET" />saja dan mengabaikan <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />. Ini bekerja untuk saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.