api - 使用 Netinfo 在 AsyncStorage React Native 中持久化 API 数据
问题描述
我想在没有互联网连接的情况下重新打开 React Native 应用程序时存储获取的 API 数据。在没有互联网连接的情况下打开应用程序时,我使用 NetInfo 来确定连接是否正常,如果有连接则显示正常,否则如果没有连接(离线)加载 ActivityIndicator 出现一点然后什么也没有出现,
我使用另一种逻辑,例如检查状态是否为空,然后获取 api 并存储数据,否则从存储中获取数据,这工作正常,但如果我使用 react-native run-android 重新启动应用程序,则数据永远不会出现。
这是我的代码:
NetInfo.fetch().then(state => {
if (state.isConnected) {
getArticles(this.state.url)
.then((data) => {
// console.log('connection ok!');
AsyncStorage.setItem('obj', JSON.stringify(data));
this.setState({
isLoading: false,
data: data,
});
//DATA SET TO STATE + ASYNCSTORAGE
})
}
else {
AsyncStorage.getItem('obj').then((value) => {
// console.log('connection not ok!');
this.setState({
isLoading: false,
data:JSON.parse(value)
});
});
}
});
}
这是我没有 Netinfo 的代码:
componentDidMount() {
if(this.state.data=='null'){
getArticles(this.state.url)
.then((data) => {
// console.log('connection ok!');
AsyncStorage.setItem('obj', JSON.stringify(data));
this.setState({
isLoading: false,
data: data,
});
//DATA SET TO STATE + ASYNCSTORAGE
})
}
else {
AsyncStorage.getItem('obj').then((value) => {
// console.log('connection not ok!');
this.setState({
isLoading: false,
data:JSON.parse(value)
});
});
}
}
我在android中添加了这一行
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
当我控制台记录 state.isConnected 时,即使关闭我的电脑上的互联网,它也总是正确的。如果我关闭移动数据,它会显示错误无法连接到调试器。
解决方案
推荐阅读
- git - Yocto 后处理功能中的克隆存储库
- powershell - 在 Powershell 中,如何通过将字符串附加到另一个文件的内容来构建文件?
- c++ - 仅在可变参数模板类中调用现有函数
- reactjs - 卸载反应钩子中的循环行为
- azure-devops - 显示来自 Azure Repos(Github Pages 等效项)的前端 UI
- javascript - 如何访问动态分配的图像?
- python-3.x - 看起来像括号下面有两个点的符号是什么?我需要按哪些按钮才能使用它?
- asp.net-core - 是否可以将来自一个配置源的占位符替换为 Microsoft.Extensions.Configuration 中另一个配置源的值?
- angular - TypeError:无法读取角度未定义的属性“userData”
- php - 用 OpenSSL 替换 Mcrypt - 这可能吗