web-dev-qa-db-fra.com

Connexion Android à localhost

J'essaie de connecter mon application Android à une URL d'hôte locale grâce au serveur wamp, mais cela ne fonctionne pas. Mon objectif ici est de récupérer les données JSON et de les analyser. Pour mon test, j'utilise un appareil autre que l'émulateur et j'utilise l'autorisation dans AndroidManifest.xml: 

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

Mon URL ressemble à ceci:

String 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 d’URL json 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 String 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<String, String, JSONArray> {

    MainActivity ma;

    public JsonDownloaderTask(MainActivity main){
        ma = main;
    }

    @Override
    protected JSONArray doInBackground(String... 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 {
    String data = "";
    JSONArray jsonArray = null;        
    InputStream is = null;

    public JSONParser(){}

    // Method to download json data from url
    public JSONArray getJSONFromUrl(String 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));

            StringBuffer sb  = new StringBuffer();

            String line = "";
            while( ( line = br.readLine())  != null){
                sb.append(line);
            }
            is.close();
            data = sb.toString();

            //br.close();

            jsonArray = new JSONArray(data);

        }catch(Exception e){
            Log.d("Exception while downloading url", e.toString());
        }finally{
            is.close();
        }

        return jsonArray;
    }
}
17
AlexDG

Vous devez d’abord lier l’adresse IP de la machine sur laquelle votre serveur est exécuté dans les paramètres Eclipse.

Vous pouvez faire ça comme ça.

Eclipse Run Configuration

Cliquez avec le bouton droit sur le projet PHP dans Eclipse puis Exécuter la configuration puis dans le Web Application où vous trouverez l'onglet Argument. Maintenant, donnez ici le port et l’adresse IP du réseau local 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 à http://192.168.1.6:8080/tests/PhpProject1/connectionBDD.php

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

3
Ajay S

L’adresse IP 10.0.2.2 est utilisée pour récupérer les données de l’émulateur . Localhost indiquera toujours le périphérique émulateur/Android exécutant l’application . même réseau (connecté par Wi-Fi à votre routeur) et vous devez utiliser l'adresse IP locale de votre ordinateur (normalement un numéro 192.168.1.x).

10
user3316041

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 est d'ajouter 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" pour spécifier les paramètres d'application, ainsi qu'une entrée "Options pour les développeurs" dans "Paramètres" qui vous permet 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).

5
Michael Aaron Safyan

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.2.2.2", utilisez l'adresse IP de votre PC.

2
Kavita_p

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 l'adresse IP de votre ordinateur portable ou de votre bureau. Appeler 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.

0
Krishna

J'ai essayé"10.0.2.2:80/ mon_site/page.php" Un miracle s'est produit, il fonctionne maintenant . Je suis sur Mac et j'utilise XAMPP comme serveur.

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

À votre santé.

0
Saggy

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 devezPASsimplement utiliser "localhost", car "localhost" signifie l'émulateur Android lui-même,PASle 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".

0
Songlin

Il suffit d’installer l’extension "conveyor by Keyoti" dans Visual studio et elle générera automatiquement une URL en fonction de votre adresse IP. Voici le lien: 

convoyeur

jusqu'ici tout va bien....!

0
Musab Rasheed