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):
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é.
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.
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