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

Java 在android应用程序中连接到主机名而不是IP地址,java,android,rest,url,Java,Android,Rest,Url,我正在构建一个android应用程序,它连接到我笔记本电脑上的后端服务。它连接到从JSON获取数据的本地主机地址 当我在代码中写入笔记本电脑的IP地址时,它可以正常工作。 这个IP地址可以更改,所以我想使用似乎不起作用的主机名 私有静态最终字符串URLLocalhost=“http://localhost:8081/“; //无法工作私有静态最终字符串URLPNAME= ”http://PCNAME:8081/“;//不起作用私有静态最终 字符串URLIPAddress=“http://192.

我正在构建一个android应用程序,它连接到我笔记本电脑上的后端服务。它连接到从JSON获取数据的本地主机地址

当我在代码中写入笔记本电脑的IP地址时,它可以正常工作。 这个IP地址可以更改,所以我想使用似乎不起作用的主机名

私有静态最终字符串URLLocalhost=
“http://localhost:8081/“
; //无法工作
私有静态最终字符串URLPNAME=
”http://PCNAME:8081/“
;//不起作用
私有静态最终 字符串URLIPAddress=
“http://192.168.x.y:8081/“
;//工作,但知识产权 需要修改

@Override
public List<Spike> getSpikes() {
    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URLPCName).build();
@覆盖
公共列表getSpikes(){
RestAdapter RestAdapter=new RestAdapter.Builder().setEndpoint(urlpname.build();
当它不起作用时,我会收到多个
ECONNREFUSED
错误。
它不会很快公开,所以我没有这个URL

我已为此找到,但他们需要对我的设备进行更改。(尚未尝试)

  • 更改DNS设置
  • 编辑主机文件
我希望任何设备(可能仅限于本地wifi)都可以访问此服务,而无需更改设备中的设置

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



相关问题并没有解决我的问题:

是的,AIUI,这是预期的。
localhost
指的是Android设备正在使用的适配器,因此会将请求路由到手机本身(因此失败)

原始IP工作正常,因为它在所有设备中都是明确的

http://PCNAME:8081/
取决于此处的名称
PCNAME
,以及您的笔记本电脑正在运行的名称。如果这是Windows计算机名称(使用)那么,默认情况下,Android/Linux无法实现这一点。切换到FQDN,例如,
PCNAME.subdomain.mydomain.org
可能会起作用,但这取决于您的DHCP路由器(或您希望避免的Android中的手动网络设置)在未指定的情况下搜索该域,Android尊重无线路由,但我发现它(可能)没有


传递生成参数或在生成中设置调试和生产设置的配置文件可能更容易。另一个简单的解决方法是使用DHCP保留或手动指定IP为笔记本电脑保留静态IP。

您的PCNAME在连接的网络中是否可访问?是的,我可以访问它om同一网络上的其他笔记本电脑。并且设备连接到同一网络是的,是的,确实是。(如果IP地址不可用,它会工作吗?)我的笔记本电脑确实是windows计算机。好的,如上所述,您需要在windows/本地网络设置中整理DNS。您的windows
PCNAME
不是有效的(DNS)另一个选项是任何数量的服务发现协议,以动态地找出服务器端点的位置(例如UPnP的SSDP、Eureka等),但在这里可能有些过分。。