You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native真机无法发起局域网Get请求求助

问题排查与解决方案

1. 修复Fetch调用的参数错误

你的fetch代码第二个参数传了true,这不符合API规范——fetch的第二个参数应该是配置对象(比如指定请求方法、头信息等),而非布尔值。错误的参数可能导致请求在真机上无法正确发起。修正后的代码:

const test = async () => {
  try {
    const response = await fetch('http://192.168.0.100/Power?Power=1');
    // 可选:检查请求是否成功
    if (!response.ok) {
      throw new Error(`HTTP错误状态码: ${response.status}`);
    }
    const result = await response.text(); // 或response.json(),根据设备返回格式调整
    console.log('请求结果:', result);
  } catch (error) {
    console.error('请求失败:', error.message);
  }
};

return (
  <TouchableOpacity onPress={test}>
    {/* 建议添加可见的按钮文本,方便调试 */}
    <Text>打开设备</Text>
  </TouchableOpacity>
);

添加错误捕获后,你可以通过真机的Logcat或React Native Debugger查看具体报错信息,定位问题根源。

2. 允许Android明文HTTP请求

Android 9(API级别28)及以上版本默认禁止明文HTTP请求(仅允许HTTPS),而你的设备使用的是HTTP协议,这会导致真机请求被拦截。解决方法:

  • 在android/app/src/main/AndroidManifest.xml的<application>标签中添加属性:
<application
  ...
  android:usesCleartextTraffic="true">

3. 确认真机与设备在同一局域网

  • 确保真机和智能家居设备连接的是同一个WiFi网络,且处于同一网段(比如都是192.168.0.x)。
  • 可以在真机浏览器中直接访问http://192.168.0.100/Power?Power=1,测试是否能控制设备:
    • 如果浏览器也无法访问,说明是网络问题(比如设备IP变更、WiFi隔离等),先排查网络连通性;
    • 如果浏览器能访问但APP不行,继续排查其他配置。

4. 关闭真机的网络代理

若真机开启了HTTP代理(比如连接电脑时的调试代理),可能导致局域网请求无法正确发送到设备。请关闭真机的代理设置,再测试APP。

5. 检查Android网络权限

确保AndroidManifest.xml中已添加网络访问权限:

<uses-permission android:name="android.permission.INTERNET" />

(通常React Native初始化项目时会自动添加,但可以确认一下)


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:38:20