我在本地机器上运行一个web服务,该服务运行在localhost:54722上。

我想从Android模拟器中运行的应用程序调用该服务。

我读到在应用程序中使用10.0.2.2将访问localhost,但它似乎不能与端口号一起工作。它说HttpResponseException: Bad Request。


当前回答

我不确定这个解决方案是否适用于每个Android模拟器和每个Android SDK版本,但运行下面的方法对我来说是有效的。

adb reverse tcp:54722 tcp:54722

您需要让模拟器运行起来,然后才能在运行的模拟器设备中成功地点击localhost:54722。

其他回答

我想向您展示我从我的Android模拟器访问IISExpress Web api的方式。我使用Visual Studio 2015。我从Android Studio调用Android模拟器。

我所需要做的就是将下面这一行添加到我的applicationhost中的绑定配置中。配置文件

<binding protocol="http" bindingInformation="*:<your-port>:" />

然后我检查并使用IP4地址从Android模拟器访问我的API

要求:您必须以管理员身份运行Visual Studio。这篇文章给出了一个完美的方法。

欲了解更多细节,请访问我在github上的帖子

希望这能有所帮助。

对于Laravel宅基地用户: 如果任何人使用Laravel与homestead,您可以在模拟器中使用192.168.10.10访问应用程序后端

还是不行? 另一个好的解决方案是使用ngrok https://ngrok.com/

如果您正在使用IIS Express,您可能需要绑定到所有主机名,而不仅仅是“localhost”。看看这个精彩的答案:

https://stackoverflow.com/a/15809698/383761

告诉IIS Express本身绑定到所有ip地址和主机名。在你的.config文件中(通常是%userprofile%\My 文档\ IISExpress \ config \ applicationhost。配置,或者 $ (solutionDir) .vs \ config \ applicationhost。Visual Studio配置 2015),找到你网站的绑定元素,并添加 /> . <绑定协议="http" bindingInformation="*:8080:*

请确保将其作为第二个绑定添加,而不是修改现有的绑定,否则VS将重新添加一个附加了(1)的新站点。此外,您可能需要以管理员身份运行VS。

我有一个网络服务器运行在我的本地主机。

如果我打开模拟器并想要连接到我的本地主机,我使用的是192.168.x.x。这意味着您应该使用本地局域网ip地址。顺便说一下,您的HttpResponseException(坏请求)并不意味着主机不可达。

其他一些错误会导致此异常。

我使用Windows 10作为我的开发平台,在我的模拟器中访问10.0.2.2:port没有像预期的那样工作,在这个问题上的其他解决方案也有同样的结果。

经过几个小时的深入研究,我发现如果在模拟器启动命令中添加-writable-system参数,事情就会正常工作。

你必须像下面这样通过命令行启动模拟器:

 emulator.exe -avd <emulator_name> -writable-system

然后在模拟器中,您可以使用LAN IP地址和绑定端口访问主机上运行的API服务:

http://192.168.1.2:<port>

希望这能帮到你。

关于从命令行启动模拟器:https://developer.android.com/studio/run/emulator-commandline。