You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

NativeScript模拟器运行项目时HTTP错误问题求助

排查NativeScript Android模拟器无法连接本地API的问题

我来帮你梳理这个问题,这种HTTP连接失败的情况在NativeScript搭配Android模拟器的场景里真的挺常见的,咱们一步步拆解原因和解决办法:

首先确认后端服务本身是否正常

先别着急看模拟器的问题,先在你的电脑浏览器里直接访问http://localhost:3000(或者你后端用的端口),看看能不能正常返回接口数据。如果浏览器都访问不了,那根本问题是后端服务没启动,或者监听的端口/地址不对,先把后端服务正常跑起来再说。

检查后端服务的监听地址

这是很多人踩的坑:如果你的后端服务只监听127.0.0.1(比如Express里只写app.listen(3000)),那只有你自己的电脑能访问,Android模拟器(相当于一个独立的设备)是连不上的。

  • 你需要把后端的监听地址改成0.0.0.0,这样它会监听电脑上所有的网络接口。比如Express项目里要写成:
    app.listen(3000, '0.0.0.0', () => {
      console.log('Server running on port 3000');
    });
    
  • 改成这个之后,再用浏览器访问http://192.168.1.5:3000(你的电脑局域网IP),能访问就说明监听地址配置对了。

验证模拟器的网络连通性

Android模拟器里的10.0.2.2确实是官方规定的映射到电脑localhost的地址,但咱们得确认模拟器能真的连到这个地址:

  1. 打开模拟器自带的Chrome浏览器,输入http://10.0.2.2:3000,看看能不能打开后端接口。
    • 如果能打开:说明网络是通的,问题出在你的NativeScript代码里(比如请求路径写错、拦截器有问题)。
    • 如果打不开:那就是网络层面的问题,继续往下排查。

排查防火墙拦截

你的电脑防火墙可能会挡住模拟器发来的请求,尤其是用局域网IP(比如192.168.1.5)的时候:

  • 暂时关闭电脑的防火墙,然后再用模拟器或者NativeScript项目测试请求,看看能不能成功。
  • 如果关闭防火墙后正常了,记得在防火墙上添加一条入站规则,允许3000端口的访问。

检查NativeScript的网络权限

Android APP默认没有网络访问权限,你得手动配置:

  • 找到项目里的App_Resources/Android/src/main/AndroidManifest.xml文件,检查里面有没有这行代码:
    <uses-permission android:name="android.permission.INTERNET" />
    
    如果没有,就把它添加到<manifest>标签里面,然后重新运行项目。

最后试试清理缓存和重启

有时候缓存或者模拟器状态异常也会导致这种问题:

  • 运行tns clean清理NativeScript的缓存,然后重新用tns run android --device Pixel_2_API_29启动项目。
  • 重启Android模拟器,甚至重启你的电脑,有时候能解决一些莫名其妙的网络问题。

内容的提问来源于stack exchange,提问作者lovecode

火山引擎 最新活动