我正在构建一个连接到笔记本电脑后端服务的Android应用程序。它连接到本地主机地址,从JSON获取数据。
当我在我的代码中写入笔记本电脑的IP地址时,它可以正常工作。 这个IP地址可以改变,所以我想使用似乎不起作用的主机名。
private static final String URLLocalhost =
"http://localhost:8081/"
; //不工作
私有静态final String URLPCName ="http://PCNAME:8081/"
; //没有工作
私人静态决赛 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,但他们需要更改我的设备。 (没有尝试过)
我希望任何设备(可能仅限于本地wifi)访问此服务,而无需更改设备中的设置。
如何使用我的代码中的主机名进行连接?
相关问题,无法解决我的问题:How to connect my android app to the remote web server
答案 0 :(得分:1)
是的,AIUI,这是预期的。 localhost
指的是Android设备正在使用的适配器,因此会将请求路由到手机本身(因此会失败)。
原始IP工作正常,因为它在设备上明确无误。
http://PCNAME:8081/
取决于此处PCNAME
的名称,以及您的笔记本电脑的运行情况。如果这是一个Windows机器名称(使用WINS),那么默认情况下默认情况下不会在Android / Linux上运行。切换到FQDN,例如PCNAME.subdomain.mydomain.org
应该可以正常工作,但这取决于你的DHCP路由器(或你想要避免的Android中的手动网络设置)在未指定时搜索该域,并且Android尊重无线路由,这是我&#39;我发现它没有(可能this Android bug)。
可能更容易通过构建参数传递,或者在构建中具有调试和生产设置的配置文件。另一个简单的解决方法是使用DHCP保留或仅手动指定IP为您的笔记本电脑保留静态IP。