首页 > 解决方案 > 使用 Netinfo 在 AsyncStorage React Native 中持久化 API 数据

问题描述

我想在没有互联网连接的情况下重新打开 React Native 应用程序时存储获取的 API 数据。在没有互联网连接的情况下打开应用程序时,我使用 NetInfo 来确定连接是否正常,如果有连接则显示正常,否则如果没有连接(离线)加载 ActivityIndi​​cator 出现一点然后什么也没有出现,

我使用另一种逻辑,例如检查状态是否为空,然后获取 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 时,即使关闭我的电脑上的互联网,它也总是正确的。如果我关闭移动数据,它会显示错误无法连接到调试器。

标签: apireact-native

解决方案


推荐阅读