Je reçois le message d'erreur
java.net.SocketException: échec de la socket: EACCES (autorisation refusée)
lorsque j'essaye d'appliquer le code ci-dessous. C'est la fonction que j'appelle et me donne cette exception.
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
Et voici mon fichier manifeste:
<?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>
Comment puis-je résoudre ce problème?
Réponses:
Essayez avec,
<uses-permission android:name="android.permission.INTERNET"/>
au lieu de,
<permission android:name="android.permission.INTERNET"></permission>
la source
Essaye ça:
<uses-permission android:name="android.permission.INTERNET"/>
Et vous
activity names
devez être comme ça aveccapital letters
:<activity android:name=".Addfriend"/> <activity android:name=".UpdateDetails"/> <activity android:name=".Details"/> <activity android:name=".Updateimage"/>
la source
essayez-le.
<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" />
la source
Essayez de
<uses-permission>
sortir du<application>
tag.la source
La désinstallation de l'application sur l'appareil, puis la réinstallation l'ont corrigé pour moi.
J'ai essayé toutes les autres options, rien. Enfin trouvé ce post . C'est après l'ajout de l'autorisation (ci-dessous) et le nettoyage de la version.
<uses-permission android:name="android.permission.INTERNET"/>
la source
Il peut être résolu en plaçant les lignes dans le fichier manifeste 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" />
entrez la description de l'image ici
la source
Ajoutez ce code source à votre fichier Java comme ci-dessous:
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
la source
NetworkOnMainThreadException
.Vous devrez peut-être faire AndroidStudio - Build - Clean
Si vous avez mis à jour le manifeste via le système de fichiers ou Git, il ne prendra pas en compte les modifications.
la source
Si vous utilisez un émulateur pour les tests, vous devez utiliser
<uses-permission android:name="android.permission.INTERNET" />
uniquement et ignorer<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
. Cela fonctionne pour moi.la source