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

q8l4jmvw  于 2023-05-27  发布在  Android
关注(0)|答案(2)|浏览(146)

我试图从API获取数据到Android,但发生了一些事情,阻止我获取数据或导致超时错误。我已经在以下平台上测试了这段代码:
1.零食博览会(网络):它通过了,我能够成功获取数据。

  1. Expo(本地主机:web):它通过了,我能够成功获取数据。
  2. Expo(Android Emulator):它失败了,因为它花了很长时间来加载,没有收到任何数据。
  • Expo GO(真实的设备):它失败,并显示错误消息“未捕获错误:java.net.ConnectException:无法连接到/ip“”。

版本

  • “expo”:“~48.0.15”,
  • “react”:“18.2.0”,
  • “react-native”:“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

nwsw7zdq

nwsw7zdq1#

尝试在androidManifest.xml文件中添加此内容

<application
    ...
    android:usesCleartextTraffic="true">
xwbd5t1u

xwbd5t1u2#

30分钟后,我找到了答案。由于Expo没有Manifest文件,我们将以另一种方式进行将此代码添加到app.json:

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

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

相关问题