Connexion Android à localhost

J’essaie de connecter mon application Android à une URL hôte locale grâce à wamp server mais ça ne marche pas. Mon objective ici est de récupérer des données json et d’parsingr ces données. Pour mon test, j’utilise un appareil autre que l’émulateur et j’utilise l’autorisation dans AndroidManifest.xml:

 

Mon URL ressemble à ceci:

 Ssortingng url = "http://10.0.2.2:8080/tests/PhpProject1/connectionBDD.php"; 

j’ai essayé :

 http://localhost/ http://10.0.2.2:8080/ http://10.0.2.2/ 

Mais cela n’a jamais fonctionné jusqu’à présent:

  java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 80): connect failed: ECONNREFUSED (Connection refused) failed to connect to /10.0.2.2 (port 8080): connect failed: ETIMEDOUT (Connection timed out) java.net.ConnectException: failed to connect to /10.0.2.2 (port 80): connect failed: ETIMEDOUT (Connection timed out) 

Ensuite, j’ai essayé avec un test json url trouvé sur Internet: http://headers.jsontest.com/

Cela a très bien fonctionné et j’ai obtenu des données JSON à cette adresse. Donc, je suppose que mon code est bon et que le problème ici est mon URL localhost, je ne sais pas quelle devrait être sa forme exacte. J’ai lu beaucoup de discussions à ce sujet mais je n’ai pas trouvé de solution.

Voici mon code:

Activité principale :

 public class MainActivity extends Activity { private Ssortingng url = "http://10.0.2.2:8080/tests/PhpProject1/connectionBDD.php"; private ListView lv = null; private Button bGetData; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final JsonDownloaderTask task = new JsonDownloaderTask(this); lv = (ListView) findViewById(R.id.list); bGetData = (Button)findViewById(R.id.getdata); bGetData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { task.execute(url); } }); } public void jsonTaskComplete(JSONArray data){ //todo } } 

AsyncTask:

 public class JsonDownloaderTask extends AsyncTask { MainActivity ma; public JsonDownloaderTask(MainActivity main){ ma = main; } @Override protected JSONArray doInBackground(Ssortingng... url) { JSONParser jParser = new JSONParser(); // Getting JSON from URL JSONArray jsonArray = null; try { jsonArray = jParser.getJSONFromUrl(url[0]); } catch (IOException e) { e.printStackTrace(); } return jsonArray; } protected void onPostExecute(JSONArray data){ ma.jsonTaskComplete(data); } } 

JSONParser:

 public class JSONParser { Ssortingng data = ""; JSONArray jsonArray = null; InputStream is = null; public JSONParser(){} // Method to download json data from url public JSONArray getJSONFromUrl(Ssortingng strUrl) throws IOException{ try{ URL url = new URL(strUrl); // Creating an http connection to communicate with url HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); // Connecting to url urlConnection.connect(); // Reading data from url is = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); SsortingngBuffer sb = new SsortingngBuffer(); Ssortingng line = ""; while( ( line = br.readLine()) != null){ sb.append(line); } is.close(); data = sb.toSsortingng(); //br.close(); jsonArray = new JSONArray(data); }catch(Exception e){ Log.d("Exception while downloading url", e.toSsortingng()); }finally{ is.close(); } return jsonArray; } } 

Vous devez d’abord lier l’adresse IP de la machine sur laquelle votre serveur s’exécute dans les parameters d’éclipse.

Vous pouvez le faire comme ça.

Configuration d'exécution Eclipse

Faites un clic droit sur le projet PHP dans l’éclipse, puis sur Exécuter la configuration, puis dans l’ Web Application où vous trouverez l’onglet Argument . Maintenant, donnez ici le port et l’adresse IP LAN de votre machine sur laquelle votre serveur est exécuté.

Quelque chose comme ceci –port = 8888 –address = 192.168.1.6 puis mettez à jour l’URL à l’adresse http://192.168.1.6:8080/tests/PhpProject1/connectionBDD.php

Ici, dans mon cas, il s’agit de mon adresse IP 192.168.1.6 du réseau local. Vous devrez la trouver à l’aide de la commande network telle que ipconfig , ifconfig et utiliser cette adresse IP.

L’adresse IP 10.0.2.2 est utilisée pour extraire des données de l’émulateur. Localhost indiquera toujours le périphérique émulateur / Android exécutant l’application. Pour que votre appareil récupère les données de votre ordinateur, il doit se trouver sur le même réseau (connecté par WiFi à votre routeur) et vous devez utiliser l’adresse IP locale de votre ordinateur (normalement un numéro 192.168.1.x).

Si vous essayez de vous connecter à “localhost”, le problème sera résolu sur le périphérique Android et non sur votre propre localhost (à moins que vous n’utilisiez l’émulateur). Ce que je recommande pour le développement consiste à append un menu de dépassement de capacité dans la barre d’actions comportant une entrée nommée “Paramètres” qui fournit une activité Paramètres permettant de spécifier les parameters de l’application, ainsi qu’une entrée “Options pour les développeurs” dans “Paramètres” permettant de spécifier une adresse de serveur personnalisée à utiliser. Pendant le développement, vous pouvez utiliser cette option pour entrer une adresse de serveur personnalisée pour votre application. (Vous aurez besoin d’une adresse de serveur réelle qui est réellement accessible via Internet plutôt que d’utiliser localhost pour cela).

Je suppose que vous essayez d’accéder au service Web disponible sur votre PC à partir d’un simulateur Android ou d’un appareil réel.

Pour un émulateur Android, vous ne devez PAS simplement utiliser “localhost”, car “localhost” signifie l’émulateur Android lui-même, PAS le PC hôte.

vous devez modifier le fichier / etc / hosts ou le simulateur ou le périphérique réel. ajoutez une ligne du type “192.168.0.100 service.local”.

Si vous utilisez votre téléphone au lieu d’émulateur et que vous exécutez des services sur localhost, utilisez l’URL au lieu de “10 .0.2.2”, utilisez l’adresse IP de votre PC.

Un moyen simple que je connais est de conserver les données mobiles et de partager le wifi. Connectez votre ordinateur portable ou ordinateur à ce wifi. Maintenant, voyez ip de votre ordinateur portable ou de bureau. Appelez le service depuis votre téléphone. Étant donné que votre téléphone et votre ordinateur sont maintenant sur le même réseau.

J’ai essayé “10.0.2.2:80/mysitename/page.php” Miracle est arrivé, ça marche maintenant. Je suis sur Mac et utilise XAMPP pour le serveur.

Vous pouvez changer le numéro de port. à 80 et essayer. le port 8080 ne fonctionnait pas pour moi!

À votre santé.