web-dev-qa-db-fra.com

Comment puis-je accéder à mon local REST api de mon appareil Android?

Une API REST printanière s'exécute localement sur mon ordinateur. Je voudrais utiliser cette API pour le développement Android. 

Voici ma demande de get:

public static String sendGet(final String url) {
        StringBuilder result = new StringBuilder();
        HttpURLConnection urlConnection = null;
        try {
            String apiUrl = getAbsoluteUrl(url); // concatenate uri with base url eg: localhost:8080/ + uri
            URL requestUrl = new URL(apiUrl);
            urlConnection = (HttpURLConnection) requestUrl.openConnection();
            urlConnection.connect(); // no connection is made
            InputStream in = new BufferedInputStream(urlConnection.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            urlConnection.disconnect();
        }
        return result.toString();
    }

Je peux accéder à mon api via le navigateur de mon appareil. Cependant, lorsque j'utilise cette même URL dans l'apk intégré pour effectuer la demande, aucune connexion n'est établie. 

Mon manifeste comprend:

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

Notes de côté:

Je connecte mon appareil à mon ordinateur portable exécutant l’API de repos via USB . J'utilise l’adresse IPv4 WLAN trouvée en appelant ipconfig.

Tous les conseils dans la bonne direction seraient très appréciés - merci!

Modifier pour inclure la sortie du navigateur chrome (sur le périphérique Android) de l’API locale REST exécutée sur mon ordinateur portable (demande GET visant à renvoyer les informations d’utilisateur invité par défaut):  enter image description here

8
Dayna

RESOLU si quelqu'un est intéressé:

J'ai réussi à résoudre ce problème en étendant la classe dans laquelle mon sendGet(final String url) d'origine se présentait comme suit: HttpClientUsage extends AsyncTask<String, Void, String> plus d'informations et un tutoriel peuvent être trouvés ici: Tutoriel AsyncTask

J'ai ensuite dû configurer mes paramètres CORS sur mon API REST locale comme suit:

 cors:
        allowed-origins: "*"
        allowed-methods: GET, PUT, POST, DELETE, OPTIONS
        allowed-headers: "*"
        exposed-headers:
        allow-credentials: true
        max-age: 1800

Merci à tous pour votre aide, c'est très apprécié.

1
Dayna

Vérifiez votre adresse IP: - Étapes pour vérifier votre adresse IP (assurez-vous d'être connecté à Internet)

  1. Ouvrir l'invite de commande
  2. tapez ipconfig
  3. Ip est le surligné dans l'image ci-dessous

 enter image description here

Maintenant, faites votre URL comme ceci: Http: //192.168.240.2/index.html

6
Mrinmoy

Laissez-moi vous dire un moyen plus facile de le faire. Si vous utilisez un émulateur Android, vous pouvez utiliser 10.0.2.2 comme adresse IP pour vous connecter à la machine hôte sur laquelle votre API REST est disponible. 

De même, si vous utilisez Genymotion qui utilise Oracle Virtualbox, vous pouvez utiliser 10.0.3.2.

4
rakesh kashyap

Votre URL de reste doit être quelque chose comme ceci - http://localhost:8080/yourRest/restMethod.
Au lieu de localhost url, connectez votre ordinateur mobile et local sur le même réseau (réseau wifi). Obtenez l'adresse IP de votre machine locale par exemple 192.168.1.X ... donc maintenant votre URL de point final pour le reste sera http://192.168.1.X:8080/yourRest/restMethod

3
Shadow Droid