it-swarm.com.de

Wie kann ich auf mein lokales zugreifen? REST API von meinem Android-Gerät?

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):  enter image description here

8
Dayna

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.

1
Dayna

Überprüfen Sie Ihre IP-Adresse: - Schritte zum Überprüfen der IP-Adresse (stellen Sie sicher, dass Sie mit dem Internet verbunden sind)

  1. Öffnen Sie die Eingabeaufforderung
  2. typ ipconfig
  3. IP ist das hervorgehobene in der Abbildung unten

 enter image description here

Machen Sie jetzt Ihre URL wie folgt: Http: //192.168.240.2/index.html

6
Mrinmoy

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.

4
rakesh kashyap

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

3
Shadow Droid