我正在尝试从 API 获取数据到 Android,但发生了一些事情,导致我无法获取数据或导致超时错误。我已经在以下平台上测试了此代码:
Snack Expo(Web):通过了,成功获取到数据了。
Expo (localhost: web):通过了,我能够成功获取数据。
Expo(Android模拟器):失败,因为加载时间很长并且没有收到数据。
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
30分钟后,我找到了解决方案。 因为Expo没有Manifest文件,所以我们会用另一种方式来做 将此代码添加到app.json:
"android": {
"config": {
"cleartextTraffic": true
},}
//如果文件中已存在则跳过任何部分
尝试将其添加到您的 androidManifest.xml 文件中
<application
...
android:usesCleartextTraffic="true">