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?

Sniver
sumber
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>
pengguna370305
sumber
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"/>
NagarjunaReddy
sumber
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" />
Neeraj Singh
sumber
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.

Irshu
sumber
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"/>
Gibolt
sumber
2

Itu dapat diperbaiki dengan menempatkan garis-garis di file manifes android:

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

masukkan deskripsi gambar di sini

Nikimo Jam
sumber
Selamat datang! Harap dicatat bahwa kebijakannya adalah pertanyaan dan jawaban harus dalam bahasa Inggris .
zsltg
0

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

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
CoderDream
sumber
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.

David A
sumber
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.

Jerin Raj
sumber