Internet连接侦听器

时间:2018-05-30 17:08:44

标签: javascript react-native internet-connection

我有一个扫描二维条形码的应用程序,然后从代码提供的URL中检索数据。如果用户失去与Internet的连接,应用程序将开始通过AsyncStorage存储URL。问题是,我需要实现一个监听器,在重新获得互联网连接后,应用程序开始一个给定的方法。有没有推荐的方法来实现这样的连接监听器?

编辑:
我已经尝试过使用NetInfo EventListener但是我不确定我是否错误地使用它,因为它总是调用传递的函数,即使互联网状态没有改变。

_connectionHandler = (e) => {
    this.setState({ cameraActive: false })
    NetInfo.getConnectionInfo().then((connectionInfo) => {

        if (connectionInfo.type === "none"){
            console.log("No internet")
            dataArray.push(e.data)
            let barcodeData_delta = {
                data: dataArray
            }

            AsyncStorage.mergeItem(STORAGE_KEY, JSON.stringify(barcodeData_delta));

            NetInfo.isConnected.addEventListener(
                'connectionChange',
                this._handleConnectionChange(e.data)
            );
            this.setState({ cameraActive: true })
        } else {
            console.log("Internet available -> Going to read barcode now")
            this._handleBarCodeRead(e.data);
        }
    })
}

1 个答案:

答案 0 :(得分:0)

React Native有一个NetInfo文档,在那里你可以看到如何添加一个他的连接改变的监听器,并在调用它时做你想做的事。

将处理程序添加到isConnected属性

NetInfo.isConnected.addEventListener(
  'connectionChange',
  _connectionHandler
);

一个处理变化的功能,只需用相机调整你的setState,我就无法知道何时调用它。

_connectionHandler = (isConnected) => {
    this.setState({ cameraActive: false })
        if (!isConnected){
            console.log("No internet")
            dataArray.push(e.data)
            let barcodeData_delta = {
                data: dataArray
            }
            AsyncStorage.mergeItem(STORAGE_KEY, JSON.stringify(barcodeData_delta));                   
            this.setState({ cameraActive: true })
        } else {
            console.log("Internet available -> Going to read barcode now")
            this._handleBarCodeRead(e.data);
        }
    })
}
相关问题