我在本地机器上运行一个Web服务,它在localhost:54722
运行。
我想从Android模拟器中运行的应用程序调用该服务。
我读到在应用程序中使用10.0.2.2
访问本地主机,但是这似乎无法与端口号一起使用。它显示HttpResponseException:Bad Request
。
我在本地机器上运行一个Web服务,它在localhost:54722
运行。
我想从Android模拟器中运行的应用程序调用该服务。
我读到在应用程序中使用10.0.2.2
访问本地主机,但是这似乎无法与端口号一起使用。它显示HttpResponseException:Bad Request
。
使用 10.0.2.2
作为默认 AVD 地址,10.0.3.2
作为 Genymotion 地址。
10.0.2.2
正常工作。 - Gabriel Rogath由于10.0.2.2
不是Android上的安全域名,因此您需要在API 28+的网络配置中允许非安全域名,这些域名默认情况下会被阻止非TLS连接。
您可以使用以下配置:
在main/res/xml/目录下创建一个名为network_security_config.xml的新文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.0.2.2</domain>
</domain-config>
</network-security-config>
并在 AndroidManifest.xml 中指向它。
<application
......
......
android:networkSecurityConfig="@xml/network_security_config">
我不确定这个解决方案是否适用于所有的Android模拟器和每一个Android SDK版本,但是对我来说运行以下命令起到了作用。
adb reverse tcp:54722 tcp:54722
您需要启动模拟器,然后才能成功在运行的模拟器设备内访问localhost:54722
。"android-map-localhost": "adb reverse tcp:54722 tcp:54722"
! - fullStackChris我在使用IIS Express执行Web应用程序的Visual Studio中遇到了同样的问题。 要解决此问题,您需要进入项目属性,然后单击“调试”选项卡,将http://localhost:[YOUR PORT]更改为http://127.0.0.1:[YOUR PORT],并将android URL设置为http://10.0.2.2:[YOUR PORT],这对我有用。
http://localhost:5000/
。这个解决方案适用于Android模拟器,无需修改我的服务器或模拟器的任何设置。快速、简便且可移植到其他计算机,不需要额外的工作。 - John Pang如果您正在使用IIS Express,则可能需要绑定到所有主机名而不仅仅是“localhost”。请查看此详细答案:
https://dev59.com/anA75IYBdhLWcg3waIMJ#15809698
告诉IIS Express本身绑定到所有IP地址和主机名。在您的.config文件中(通常为%userprofile%\ My Documents \ IISExpress \ config \ applicationhost.config,或 $(solutionDir).vs\config\applicationhost.config用于Visual Studio 2015),找到您网站的绑定元素,然后添加以下内容:
确保将它添加为第二个绑定项,而不是修改现有的绑定项,否则 VS 将只会重新添加一个新站点,附加了一个
<binding protocol="http" bindingInformation="*:8080:*" />
(1)
。此外,您可能需要以管理员身份运行 VS。
我在Visual Studio Professional 2015中安装了"Conveyor by Keyoti"来解决这个问题。 Conveyor生成一个带有端口(45455)的远程地址(你的IP),使外部请求得以实现。 例如:
Conveyor允许您在网络上从外部平板电脑和手机或Android模拟器(无需http://10.0.2.2:<hostport>
)测试Web应用程序。
步骤请参考以下链接:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
http://localhost:[端口号]/
,在这里找到你的端口号。ipconfig
192.168.10.33
,因此我的URL将是http://192.168.10.33:[端口号]。在Android Studio中,该URL用作您的URL。之后,在模拟器的手动代理中设置您的URL和端口号。
问题在于Android模拟器将10.0.2.2
映射到127.0.0.1
,而不是localhost
。因此,请将您的Web服务器配置为在127.0.0.1:54722
上提供服务,而不是localhost:54722
。这样应该就可以了。
我在本地主机上运行了一个网络服务器。
如果我打开模拟器并想连接到我的本地主机,则使用 192.168.x.x
。这意味着您应该使用本地局域网IP地址。顺便说一句,您的HttpResponseException (Bad Request)
并不意味着主机不可达。
一些其他错误会导致此异常。