Thông báo lỗi 'java.net.SocketException: socket fail: EACCES (Quyền bị từ chối)'


180

Tôi nhận được thông báo lỗi

java.net.SocketException: socket fail: EACCES (Quyền bị từ chối)

khi tôi cố gắng áp dụng mã dưới đây. Đây là chức năng tôi gọi và cung cấp cho tôi ngoại lệ này.

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

Và đây là tệp kê khai của tôi:

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

Làm thế nào tôi có thể khắc phục vấn đề này?


Bạn đang kiểm tra với Thiết bị hoặc Trình giả lập?
Ponmalar

Câu trả lời:


356

Hãy thử với,

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

thay vì,

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

1
+1. Ngoài ra, mặc dù điều này không liên quan gì đến vấn đề thực tế, nhưng: đừng quên cài đặt apk đúng sau khi bạn thực hiện thay đổi này ... Tôi đã tự lừa mình bằng cách giữ một bản sao khác của .apk trong một thư mục riêng biệt và quên ghi đè lên nó với cái mới trước khi cài đặt từ đó.
n611x007

Làm việc cho tôi kể từ nov, 2013. Sử dụng nhật thực, bạn có thể chỉnh sửa AndroidManifest.xml bằng trình chỉnh sửa ưa thích có tab Quyền. Thêm quyền sử dụng và chọn quyền này từ menu thả xuống.
jjohn

4
quan trọng - thẻ quyền sử dụng cần phải có trước thẻ ứng dụng trong tệp kê khai. đó là những gì đã sửa nó cho tôi ít nhất ..
Hoặc Gal

39

Thử cái này:

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

Và bạn activity namesphải như thế này với capital letters:

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

4
- Nếu bạn có thêm thông tin trong câu trả lời, thì chỉ đăng nếu bạn có câu trả lời giống như đã trả lời thì hãy ủng hộ câu trả lời đó.
dùng370305

1
@ user370305 xin lỗi, ý bạn là anh ấy chỉ nên đăng thông tin bổ sung? không phải là người bản địa, tôi không thể hiểu ý của bạn nhưng tôi muốn biết về công cụ meta.
n611x007

32

thử nó.

<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
Trong trường hợp ai đó vẫn đang tự hỏi nên đặt chúng ở đâu: Bạn có thể đặt chúng trong tệp kê khai / AndroidManifest.xml, trước khi <application
Tiw

19

Hãy thử di chuyển <uses-permission>bên ngoài <application>thẻ.


7

Gỡ cài đặt ứng dụng trên thiết bị và sau đó cài đặt lại đã sửa nó cho tôi.

Đã thử tất cả các tùy chọn khác, không có gì. Cuối cùng tìm thấy bài này . Đây là sau khi thêm quyền (bên dưới) và dọn dẹp xây dựng.

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

2

Nó có thể được sửa bằng cách đặt các dòng trong tệp kê khai 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" />

nhập mô tả hình ảnh ở đây


Chào mừng bạn Xin lưu ý rằng chính sách là các câu hỏi và câu trả lời cần phải bằng tiếng Anh .
zsltg

0

Thêm các mã nguồn đó vào tệp Java của bạn như dưới đây:

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

5
Đây không phải là câu trả lời cho câu hỏi này mà là về sự thiếu quyền trong bảng kê khai. Và đây là một câu trả lời rất tệ cho vấn đề mà nó là một câu trả lời, tức là NetworkOnMainThreadException.
laalto

0

Bạn có thể cần làm AndroidStudio - Build - Clean

Nếu bạn đã cập nhật tệp kê khai thông qua hệ thống tệp hoặc Git, nó sẽ không nhận các thay đổi.


0

Nếu bạn đang sử dụng một trình giả lập để thử nghiệm thì bạn phải <uses-permission android:name="android.permission.INTERNET" />chỉ sử dụng và bỏ qua <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />. Nó hoạt động với tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.