在Android应用程序中连接主机名而不是IP地址

时间:2014-11-24 10:38:32

标签: java android rest url

我正在构建一个连接到笔记本电脑后端服务的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,但他们需要更改我的设备。 (没有尝试过)

  • 更改DNS设置
  • 编辑主机文件

我希望任何设备(可能仅限于本地wifi)访问此服务,而无需更改设备中的设置。

如何使用我的代码中的主机名进行连接?


相关问题,无法解决我的问题:How to connect my android app to the remote web server

1 个答案:

答案 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。