2017-02-26 129 views
0

注意:我知道在這裏已經多次提出了類似的問題,但是沒有一個建議的解決方案爲我解決問題(或者我可能錯過了正確的解決方案)。無法從Android應用程序訪問本地主機

我有一個Android應用程序,該應用程序應該與REST API進行通信,該應用程序也在本地主機上運行。但是,我無法從設備或模擬器訪問API。這是我曾嘗試網址:

有趣的是,我可以從設備的瀏覽器訪問API,以及也來自仿真器的瀏覽器。

請注意,我的設備連接到相同的WiFi我的筆記本電腦,和我有互聯網的權限在我的應用程序:

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

我想這個問題可能是由於我使用REST庫發生(排球),但是我仍然無法使用java.net中的標準類訪問API。我從192.168.0.xx獲得404,並從192.168.1.xx和10.0.2.2超時。

我試過其他的東西,例如打開USB綁定,使用不同的端口爲我的API,禁用WiFi和嘗試通過移動數據等,但他們都沒有解決我的問題。

任何想法這裏怎麼了?

+1

如果你得到一個404,那麼你連接到你的服務器。你的服務器不喜歡這個URL。查看您的服務器日誌,以查看您的客戶端請求的URL。 – CommonsWare

+0

這是有價值的反饋,謝謝。事實證明,由於缺少對javax.el-api的依賴關係,因此未在任何地方記錄依賴關係(我正在使用RestEasy並且它是​​Jetty應用程序),因此在服務器中拋出了ValidationException。我在添加攔截器後發現了這一點。一切工作正常後添加依賴項。 – Egemen

回答

1

對於訪問運行模擬器的開發機器上的Web應用程序的模擬器,使用10.0.2.2應該可以工作。

對於其他一切—模擬器訪問另一臺機器或硬件訪問任何東西—使用到達該機器的可路由IP地址。

您的192.168.0.xx值看起來是正確的,因爲您收到404錯誤。如果服務器將錯誤代碼發送給您,唯一的方法是獲得404。如果您無法連接到服務器時,你會得到某種異常,而不是404

調試爲什麼你得到一個404響應,而不是200和所需的Web服務的輸出,留作爲讀者鍛鍊。 :-)

+0

爲了記錄,這是由於缺少對javax.el-api的依賴性而導致的服務器驗證異常。原來,我需要更好地登錄我的REST API,因爲這沒有記錄到任何地方,所以我完全錯過了它。 – Egemen

相關問題