Прослушиватель подключения к Интернету

У меня есть приложение, которое сканирует 2D-штрих-коды, а затем извлекает данные из URL-адресов, предоставленных кодами. В случае, если пользователь теряет подключение к Интернету, приложение начинает сохранять URL-адреса через AsyncStorage. Проблема в том, что мне нужно реализовать прослушиватель, который после восстановления подключения к Интернету запускает данный метод. Существуют ли какие-либо рекомендуемые способы реализации такого прослушивателя соединений?

Изменить:
Я пытался использовать 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);
        }
    })
}

person Michael    schedule 30.05.2018    source источник


Ответы (1)


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);
        }
    })
}
person Bruno Mazzardo    schedule 30.05.2018
comment
Эй, спасибо за ответ! Я понял, что забыл добавить, что я пробовал прослушиватель NetInfo, но, похоже, он не работает так, как я ожидал. Я отредактировал свой оригинальный пост, если у вас есть возможность взглянуть еще раз. - person Michael; 30.05.2018
comment
Вы имеете в виду _handleConnectionChange? - person Michael; 30.05.2018
comment
Перемещение слушателя за пределы функции в конечном итоге сработало, большое спасибо! - person Michael; 30.05.2018