2012-06-30 4 views
135

я получаю сообщение об ошибкеСообщение об ошибке 'java.net.SocketException: сокет не удалось: EACCES (Отказано в)'

java.net.SocketException: гнездо не удалось: EACCES (нет прав)

, когда я пытаюсь применить приведенный ниже код. Это функция, которую я вызываю, и дает мне это исключение.

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 

И это мой файл манифеста:

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

Как я могу исправить эту проблему?

+0

Вы проверяете устройство или эмулятор? – Ponmalar

ответ

280

Попробовать,

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

вместо,

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

+1. Кроме того, хотя это не имеет ничего общего с реальной проблемой, но: не забудьте установить * right * apk после того, как вы внесете это изменение ... Я обманул себя, сохранив еще одну копию .apk в отдельном и забыл перезаписать его новым, прежде чем устанавливать оттуда. – n611x007

+0

Работал для меня по состоянию на ноябрь 2013 года. Используя eclipse, вы можете редактировать AndroidManifest.xml с помощью модного редактора, имеющего вкладку «Разрешения». Добавьте разрешение использования и выберите это разрешение в раскрывающемся меню. – jjohn

+3

Важно. Тег использования-разрешения должен находиться перед тегом приложения в файле манифеста. это то, что исправило это для меня как минимум .. –

33

Попробуйте это:

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

И ваш activity names должно быть, как это с capital letters:

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

- Если у вас есть дополнительная информация в ответе, тогда отправляйте сообщение только в том случае, если у вас есть то же самое, что уже было ответили, а затем поддерживают этот ответ. – user370305

+1

@ user370305 Извините, вы имеете в виду, что он должен только размещать дополнительную информацию? не будучи родным, я не могу понять, что вы имели в виду, но я хотел бы узнать о мета-вещах. – n611x007

+0

@naxa - Ответ отредактирован за 5 минут не был идентифицирован как отредактированный .. :-) – user370305

1

Добавить этот исходный код в файл Java, как показано ниже:

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

Это не ответ на этот вопрос, касающийся недостающего разрешения в манифесте. И это очень плохой ответ на проблему, это ответ на вопрос, «NetworkOnMainThreadException». – laalto

17

Попробуйте переставить <uses-permission> вне <application> тега.

+0

эта проблема решена. tnx –

+0

спасибо, это правильный ответ ... –

17

попробуйте.

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

Вам может понадобиться сделать AndroidStudio - Build - Clean

Если вы обновили манифеста через файловую систему или Git не будет забрать изменения.