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

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

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


当前回答

由于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模拟器访问IISExpress Web api的方式。我使用Visual Studio 2015。我从Android Studio调用Android模拟器。

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

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

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

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

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

希望这能有所帮助。

你需要设置URL为10.0.2.2:portNr

portNr = ASP给出的端口。我当前的服务在localhost上运行:3229/ service .svc

我的url是10.0.2.2:3229

我用这种方法解决了我的问题

我希望它能有所帮助……

如果你和Asp一起工作。Net Web API,在项目中的.vs/config文件夹中,根据您的端口设置修改这些行。假设你使用端口1234和物理路径的项目文件夹设置由IIS是“D:\My Projects\YourSiteName”,那么

<site name="YourSiteName" id="1">
                <application path="/" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="D:\My Projects\YourSiteName" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:1234:*" />
                </bindings>
            </site>

在android studio中,使用“http://10.0.2.2:1234”访问你的api…

解释为什么localhost不能从模拟器提供给任何有基本访问问题的人。对于复杂的案例,请阅读其他答案。

问题:模拟器有自己的本地网络和本地主机映射到模拟器,但不是你的主机!

解决方案:

将服务器绑定为0.0.0.0以使其可用于模拟器的网络 获取笔记本电脑的外部IP地址:ifconfig命令 在Android(或Flutter应用程序)中,使用您的外部接口IP地址,如:192.168.1.10而不是localhost