无法从Android设备的API获取数据(React-Native)

问题描述 投票:0回答:2

我正在尝试从 API 获取数据到 Android,但发生了一些事情,导致我无法获取数据或导致超时错误。我已经在以下平台上测试了此代码:

  1. Snack Expo(Web):通过了,成功获取到数据了。

  2. Expo (localhost: web):通过了,我能够成功获取数据。

  3. Expo(Android模拟器):失败,因为加载时间很长并且没有收到数据。

  4. Expo GO(真实设备):失败并显示错误消息“未捕获错误:java.net.ConnectException:无法连接到/ip”。

    版本

    • "世博会": "~48.0.15",

    • “反应”:“18.2.0”,

    • “反应原生”:“0.71.8”,

  • 这是我的代码,App.json如下

    应用程序:

    import React, { useEffect, useState } from 'react';
    import { View, Text, FlatList } from 'react-native';
    
    export default function Test2() {
      const [data, setData] = useState([]);
    
      useEffect(() => {
        fetchData();
      }, []);
    
      const fetchData = () => {
        console.log("start");
        fetch('https://646ee64209ff19b120864a07.mockapi.io/users')
          .then(response => response.json())
          .then(data => {
            console.log("data:", data);
            setData(data);
          })
          .catch(error => {
            console.error(error);
          })
          .finally(() => {
            console.log("end");
          });
      };
    
      return (
        <View>
          <FlatList
            data={data}
            renderItem={({ item }) => (
              <View>
                <Text>Id user: {item.id}</Text>
                <Text>Name user: {item.name}</Text>
                <Text>-------------------------</Text>
              </View>
            )}
            keyExtractor={item => item.id}
          />
        </View>
      );
    }
    
    

App.Json

{
  "expo": {
    "name": "MyApp",
    "slug": "MyApp",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "light",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#ffffff"
      }
    },
    "web": {
      "favicon": "./assets/favicon.png"
    }
  }
}

我试过:

  • 检查互联网:连接良好

  • 检查JSON文件:通过

我用于测试的JSON链接:https://646ee64209ff19b120864a07.mockapi.io/users

android react-native
2个回答
1
投票

30分钟后,我找到了解决方案。 因为Expo没有Manifest文件,所以我们会用另一种方式来做 将此代码添加到app.json:

"android": {
      "config": {
        "cleartextTraffic": true
      },}

//如果文件中已存在则跳过任何部分


0
投票

尝试将其添加到您的 androidManifest.xml 文件中

<application
    ...
    android:usesCleartextTraffic="true">
© www.soinside.com 2019 - 2024. All rights reserved.