2014-11-24 92 views
0

我正在構建一個連接到我的筆記本電腦後端服務的Android應用程序。它連接到從JSON獲取數據的本地主機地址。連接到主機名而不是IP地址在Android應用程序

當我在我的代碼中寫入筆記本電腦的IP地址時,它可以正常工作。 這個IP地址可以改變,所以我想使用似乎不起作用的主機名。

private static final String URLLocalhost = "http://localhost:8081/"; //不工作
private static final String URLPCName = "http://PCNAME:8081/"; //不起作用
private static final String URLIPAddress = "http://192.168.x.y:8081/"; 需要//作品,但IP修改

@Override 
public List<Spike> getSpikes() { 
    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URLPCName).build(); 

我得到多個ECONNREFUSED錯誤時,這是​​行不通的。
它不會很快上市,所以我沒有這個網址。

我找到了some solutions,但他們需要對我的設備進行更改。 (還沒有嘗試過)

  • 更改DNS設置
  • 編輯hosts文件

我想任何設備(可能僅限於本地的無線網絡),而不必訪問此服務更改設備中的設置。

如何從我的代碼中使用主機名進行連接?


相關的問題,並沒有解決我的問題:How to connect my android app to the remote web server

+0

您是否可以在您連接的網絡中使用PCNAME? – Blackbelt 2014-11-24 10:41:51

+0

是的,我可以在同一網絡上的其他筆記本電腦上找到它。 – miva2 2014-11-24 10:45:15

+0

和設備連接到相同的網絡 – Blackbelt 2014-11-24 10:47:36

回答

1

是,AIUI,這是符合市場預期。 localhost指的是Android設備正在使用的適配器,因此會將請求路由到電話本身(從而失敗)。

原始IP可以正常工作,因爲它在設備中是明確的。

http://PCNAME:8081/取決於什麼樣的名字PCNAME在這裏,以及你的筆記本電腦正在運行。如果這是一個Windows機器名稱(使用WINS),那麼默認情況下,Android/Linux無法正常工作。切換到FQDN,例如PCNAME.subdomain.mydomain.org應該可能工作,但這依賴於您的DHCP路由器(或您想避免的Android手動網絡設置)在未指定時搜索該域,以及Android尊重該無線路由,我發現它沒有(可能是this Android bug)。

可能更容易讓這通過構建參數,或者在您的構建中具有用於調試和生產設置的配置文件。另一個簡單的解決方法就是使用DHCP預留或僅手動指定IP爲筆記本電腦預留靜態IP。

+0

我的筆記本電腦確實是一臺Windows機器。 – miva2 2014-11-24 10:56:11

+0

好吧,如上所述,您需要在Windows /本地網絡設置中對您的DNS進行整理。在設置DNS域之前,您的Windows PCNAME不是有效的(DNS)主機名(http://superuser.com/questions/61827/how-can-i-add-a-search-domain -in-窗口-7)。 另一個選擇是任何數量的服務發現協議,以找出_dynamically_你的服務器端點在哪裏(例如UPnP的SSDP,Eureka,各種東西),但可能過度殺傷這裏。 – declension 2014-11-24 11:25:08

相關問題