Ich habe eine Spring-API REST, die lokal auf meinem Computer ausgeführt wird. Ich möchte diese API für die Android-Entwicklung verwenden.
Hier ist meine Anfrage:
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();
}
Ich kann über den Browser meines Geräts auf meine API zugreifen. Wenn ich jedoch dieselbe URL in der erstellten Apk verwende, um die Anfrage zu stellen, wird keine Verbindung hergestellt.
Mein Manifest beinhaltet:
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Randnotizen:
Ich schließe mein Gerät an meinen Laptop an, auf dem die restliche API über USB ausgeführt wird. Ich verwende die WLAN-IPv4-Adresse, die beim Aufrufen von ipconfig gefunden wurde.
Alle Tipps in die richtige Richtung wäre sehr dankbar - danke!
Bearbeiten, um die Ausgabe des Chrome-Browsers (auf Android-Geräten) von der lokalen REST -API einzuschließen, die auf meinem Laptop ausgeführt wird (eine GET-Anforderung zur Rückgabe der Standard-Gastbenutzerinformationen):
Gelöst, wenn jemand interessiert ist:
Es ist mir gelungen, dieses Problem zu beheben, indem die Klasse erweitert wurde, in der sich mein ursprüngliches sendGet(final String url)
wie folgt befand HttpClientUsage extends AsyncTask<String, Void, String>
Weitere Informationen und ein Tutorial finden Sie hier: AsyncTask-Tutorial
Ich musste dann meine CORS-Einstellungen für meine lokale REST - API wie folgt konfigurieren:
cors:
allowed-origins: "*"
allowed-methods: GET, PUT, POST, DELETE, OPTIONS
allowed-headers: "*"
exposed-headers:
allow-credentials: true
max-age: 1800
Vielen Dank für Ihre Hilfe, es wird sehr geschätzt.
Lassen Sie mich Ihnen einen einfacheren Weg erklären. Wenn Sie einen Android-Emulator verwenden, können Sie 10.0.2.2 als IP-Adresse verwenden, um eine Verbindung zum Host-Computer herzustellen, auf dem Ihre REST -API verfügbar ist.
Wenn Sie Genymotion verwenden, das Oracle Virtualbox verwendet, können Sie 10.0.3.2 verwenden.
Ihre rest-URL muss ungefähr so aussehen - http://localhost:8080/yourRest/restMethod
.
Anstelle von localhost-URL verbinden Sie Ihre mobile und lokale Maschine in demselben Netzwerk (WLAN-Netzwerk). Rufen Sie die IP-Adresse Ihres lokalen Rechners ab z. B. 192.168.1.X .... Nun wird Ihre Endpunkt-URL für den Rest http://192.168.1.X:8080/yourRest/restMethod