2016-12-17 2 views
4

У меня есть весна REST api, работающая локально на моем компьютере. Я бы хотел использовать этот api для разработки Android.Как я могу получить доступ к моему локальному REST 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" /> 

Боковые ноты:

я подключаю мое устройство для моего ноутбука работает АНИ остальное через USB. Я использую адрес IPv4 WLAN, найденный при вызове ipconfig.

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

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

+0

Вы можете получить доступ к 'localhost: 8080' из браузера ** для Android **? Возможно нет. 'localhost' означает разные вещи на всех устройствах. –

+1

попробуйте подключиться к вашему устройству через localhost check [this] (http://stackoverflow.com/questions/4779963/how-can-i-access-my-localhost-from-my-android-device), получить доступ к вашему файлу и проанализируйте его – Mohit

+0

@ cricket_007: Я могу получить доступ к своему IP-адресу WLAN IP-адреса + URI из своего браузера Android. У меня есть api следующим образом: – Dayna

ответ

1

решаемые, если кому-то интересно:

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

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

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

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

1

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

+0

Я могу получить доступ к моему остальному url без проблем из моего браузера планшета, но когда я получаю доступ к тому же URL-адресу из моей сборки apk, я не получаю соединение. – Dayna

3

Проверьте Ваш IP: - шаги, чтобы проверить IP (убедитесь, что вы подключены к интернету)

  1. Открыть командную строку
  2. типа IPCONFIG
  3. Ip является выделенный в одно изображение, ниже

enter image description here

Теперь сделайте свой адрес, как это: http://192.168.240.2/index.html

+0

Эй, большое спасибо за загрузку изображения, однако я тоже пробовал это, и мне все еще не повезло из файла apk. Я добавил изображение в свой исходный вопрос, чтобы показать вывод из браузера моего устройства. Я вызываю этот же адрес из моей сборки android и не получаю никакого ответа. – Dayna

2

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

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

+0

Спасибо за комментарий. Я только что попытался сделать это с эмулятором и до сих пор не ответил на мою хост-машину. Hmm ... – Dayna

+0

Вы используете эмулятор Android? вы можете проверить и сообщить мне информацию с эмулятора. settings-> about phone-> status-> IP-адрес –

+0

Мне не удалось найти настройки -> о телефоне и т. д., поэтому я запустил 'adb shell' ' ifconfig' ** с результатом: ** 10.0. 2.15 – Dayna

Смежные вопросы