AsyncStorage getItem и setItem не работают на устройстве Android - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь сохранить значения текущей даты в миллисекундах в AsyncStorage setItem и получить его с помощью getItem при изменении состояния приложения. Я использую слушатели AppState для изменения состояния и сравнения значений. Это прекрасно работает, когда я запускаю его на симуляторах IOS, но не работает, когда я работаю на устройстве Android. Кто-нибудь может мне помочь?

    StoreDate = async () => {

        console.log("Date",new Date().getTime().toString());
        await AsyncStorage.setItem('date', new Date().getTime().toString());
      };

      retrieveDate = async () => 
      {
        try{
        let value = await AsyncStorage.getItem('date')
         var Intvalue = parseInt(value,10); // value of newDate().getTime() as Integer
         console.log("Intvalue",Intvalue);
        console.log("value",value);
        Alert.alert(value);
        return value;
    }
          catch(error){
            Alert.alert(error);
          }
      };

    _handleAppStateChange = (nextAppState) => 
         if (this.state.appState.match(/inactive/) && nextAppState === 'background') {

          let getDateTime = this.StoreDate().then((filter) => {
            console.log("filter",filter);
            console.log("getDateTime",getDateTime);
          });
      }
  else if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') {

let currentDate = new Date().getTime();   
          let currentDateTimeStamp =   Math.floor(currentDate / 1000);

           console.log("currentDate",currentDate);
           console.log("currentDateTimeStamp",currentDateTimeStamp);




          let storedTime = this.retrieveDate().then((filter)=>  {

            console.log("filter",filter);
            console.log("storedTime",storedTime);

            var Intfilter = parseInt(filter,10);
            console.log("Intfilter",Intfilter);


            var IntfilterSeconds = Math.floor(Intfilter / 1000);
            console.log("IntfilterSeconds",IntfilterSeconds);

             var timeDiff = currentDateTimeStamp - IntfilterSeconds;
            console.log("timeDiff",timeDiff)



            if(timeDiff > 300){
              ** DO Something ** 

              })



             }
            else{
          **   Do Something **
              })

           }

           });

        }

1 Ответ

0 голосов
/ 12 июля 2019

Существует решение этой проблемы. Я обнаружил, что это не проблема с AsyncStorage, а с AppState. В андроиде в основном два appstate: активный и фоновый. Обработка appState, когда приложение находится в фоновом режиме для соответствия (active | background) && nextAppState = 'background', решила проблему для меня.

...