2016-12-17 48 views
4

我有一個在我的電腦上本地運行的spring REST api。我想爲Android開發使用這個api。如何從我的android設備訪問本地REST api?

這裏是我的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(); 
    } 

我可以通過我的設備的瀏覽器訪問我的API。但是,當我在構建的apk中使用相同的URL來發出請求時,不會建立連接。

我的清單包括:

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

旁註:

我我的設備連接到我的筆記本電腦上運行,通過USB的REST API。 我正在使用通過調用ipconfig找到的WLAN IPv4地址。

任何提示在正確的方向將非常感謝 - 謝謝!

編輯,包括Chrome瀏覽器(Android設備上)輸出從本地REST API在我的筆記本電腦(GET請求返回默認的guest用戶信息)運行: enter image description here

+0

您可以從** android瀏覽器**訪問'localhost:8080'?可能不會。 'localhost'在所有設備上表示不同的東西。 –

+1

嘗試連接到您的設備通過本地檢查[這](http://stackoverflow.com/questions/4779963/how-can-i-access-my-localhost-from-my-android-device),訪問您的文件和解析它 – Mohit

+0

@ cricket_007:我可以從我的android瀏覽器訪問我的WLAN IPv4地址+ URI。我有一個API如下: – Dayna

回答

1

解決的,如果有人有興趣:

我設法通過如下HttpClientUsage extends AsyncTask<String, Void, String>更多的信息和指南可以在這裏找到擴展類我原來sendGet(final String url)是解決這個問題:AsyncTask tutorial

然後我必須在我的本地REST API上配置我的CORS設置,如下所示:

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
而不是本地主機url連接您的手機和本地機器在同一網絡(wifi網絡)。獲取本地計算機如192.168.1.X的IP地址...所以現在休息的終點URL將被http://192.168.1.X:8080/yourRest/restMethod

+0

我可以從我的平板設備瀏覽器訪問我的休息網址,但是當我從我的apk版本訪問相同的網址時,我沒有連接。 – Dayna

3

檢查您的IP: - 步驟檢查IP(請確保您連接到互聯網)

  1. 打開命令提示
  2. 類型IPCONFIG
  3. IP是下面
突出一個在圖像

enter image description here

現在使你的URL是這樣的: http://192.168.240.2/index.html

+0

嘿非常感謝您的圖片上傳,但我已經嘗試了這一點,仍然沒有運氣從我的apk文件。我在原始問題中附加了一個圖像,以顯示設備瀏覽器的輸出。我從我的android構建調用這個相同的地址,並沒有檢索任何響應。 – Dayna

2

讓我告訴你一個簡單的方法來做到這一點。如果您使用的是Android模擬器,則可以使用10.0.2.2作爲IP地址以連接到REST API可用的主機。

同樣,如果您使用的是使用Oracle Virtualbox的Genymotion,則可以使用10.0.3.2。

+0

感謝您的評論。我剛剛嘗試過用模擬器做這件事,而且我的主機仍然沒有迴應。嗯... – Dayna

+0

你使用的是android模擬器?你可以檢查並讓我知道模擬器的細節。設置 - >關於手機 - >狀態 - > IP地址 –

+0

我找不到設置 - >關於手機等。 2.15 – Dayna

相關問題