it-roy-ru.com

Как я могу получить доступ к своему местному REST API с моего устройства Android?

У меня есть весенний REST API, работающий локально на моем компьютере. Я хотел бы использовать этот API для разработки Android. 

Вот мой запрос на получение:

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();
    }

Я могу получить доступ к моему API через браузер моего устройства. Тем не менее, когда я использую этот же URL во встроенном apk для выполнения запроса, соединение не устанавливается. 

Мой манифест включает в себя:

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

Примечания стороны:

Я подключаю свое устройство к ноутбуку, на котором запущены остальные API-интерфейсы через USB .. Я использую адрес WLAN IPv4, найденный при вызове ipconfig.

Любые советы в правильном направлении будут высоко оценены - спасибо!

Изменить, чтобы включить вывод браузера Chrome (на устройстве Android) из локального API REST, работающего на моем ноутбуке (запрос GET для возврата информации о гостевом пользователе по умолчанию):  enter image description here

8
Dayna

РЕШЕНО, если кому-то интересно

Мне удалось решить эту проблему, расширив класс, в котором находилась моя исходная функция sendGet(final String url), следующим образом: HttpClientUsage extends AsyncTask<String, Void, String> дополнительную информацию и учебник можно найти здесь: учебник по AsyncTask

Затем мне пришлось настроить параметры CORS для моего локального REST API следующим образом:

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

Спасибо всем за помощь, это очень ценится.

1
Dayna

Проверьте свой ip: - Шаги, чтобы проверить ip (убедитесь, что вы подключены к Интернету)

  1. Открыть командную строку
  2. введите ipconfig
  3. IP выделен на изображении ниже

 enter image description here

Теперь сделайте ваш URL следующим образом: Http: //192.168.240.2/index.html

6
Mrinmoy

Позвольте мне рассказать вам более простой способ сделать это. Если вы используете эмулятор Android, вы можете использовать 10.0.2.2 в качестве IP-адреса для подключения к хост-машине, на которой доступен ваш REST API. 

Аналогично, если вы используете Genymotion, который использует Oracle Virtualbox, вы можете использовать 10.0.3.2.

4
rakesh kashyap

Ваш rest url должен быть примерно таким - http://localhost:8080/yourRest/restMethod.
Вместо локального URL-адреса подключите свой мобильный и локальный компьютер к одной сети (сети Wi-Fi). Получите IP-адрес вашего локального компьютера например, 192.168.1.X ... так что теперь ваш конечный URL-адрес для отдыха будет http://192.168.1.X:8080/yourRest/restMethod

3
Shadow Droid