0

Meine reaktionsnative App funktioniert einwandfrei auf dem Emulator. Aber als ich es auf das eigentliche Gerät übertragen habe, scheint Callbacks von AsyncStorage nicht zu funktionieren. Ich habe sogar versucht, die Apk freizugeben. aber kein Glück.AsynStorage scheint auf meinem physischen Gerät nicht zu funktionieren

Ich speichere das Element aus einer Datei 'Attraction.js' so.

async addToRecentSearches(){ 
try{ 
    var recentSearches = JSON.parse(await AsyncStorage.getItem("@travelGeo:recentSearches")); 
    var hasAMatch = recentSearches.find((el)=>{ 
    return el.name.toLowerCase() === this.props.navigation.state.params.attraction.name.toLowerCase(); 
    }) 

    console.log("hasAMatch", hasAMatch); 

    // add the attraction to the AsyncStorage if the attraction doesnt already exist 
    if(!hasAMatch){ 
    if(recentSearches && recentSearches.length===3){ 
     /***push attraction and pop one***/ 
     recentSearches.unshift(this.props.navigation.state.params.attraction); 
     recentSearches.pop(); 
     AsyncStorage.setItem("@travelGeo:recentSearches", JSON.stringify(recentSearches)); 

    }else if(recentSearches && recentSearches.length<3){ 
     /***push this attraction to the array***/ 
     recentSearches.unshift(this.props.navigation.state.params.attraction) 

     AsyncStorage.setItem("@travelGeo:recentSearches", JSON.stringify(recentSearches)); 
    }else{ 
     /***add this attraction to the storage***/ 
     let arr = []; 
     arr.unshift(this.props.navigation.state.params.attraction); 

     AsyncStorage.setItem("@travelGeo:recentSearches", JSON.stringify(arr)); 
    } 
    } 
}catch(e){ 
    console.log(e); 
} } 

und ich bin dem Aufruf dieser Funktion Asynchron von componentDidMount

componentDidMount(){ 
this.addToRecentSearches(); 
} 

Und dann versuche ich die Daten von einem anderen Weg (Weather.js) wie folgt abzurufen.

async componentWillMount(){ 
try { 
    let recentSearches = JSON.parse(await AsyncStorage.getItem("@travelGeo:recentSearches")); 
    console.log(recentSearches); 
    this.setState({testGet:recentSearches[0].name}) 
    for(var i=0;i<recentSearches.length;i++){ 
    if(recentSearches[i].location){ 
     let response = await getWeatherByLocation(recentSearches[i].location.latitude,recentSearches[i].location.longitude); 

     recentSearches[i].currentWeatherData = response; 
    } 
    } 

    console.log("recentSearchesWithWeatherData", recentSearches); 
    this.setState({recentSearches:recentSearches}); 

} catch (e) { 
    console.log(e); 
} 
} 

(nur für Testzwecke Ich verwende async in componentWillMount() ist.) Und ich bin mit {recentSearches:recentSearches} Zustand der Daten zu machen.

Dieser Code funktioniert einwandfrei im Emulator. scheint aber nicht am eigentlichen Gerät zu funktionieren. Jede Hilfe würde sehr geschätzt werden.

Antwort

0

gut, ich bin ein Idiot ... es war ein wirklich dummer Fehler. Der Fehler wurde von dieser Linie geworfen

var recentSearches = JSON.parse(await AsyncStorage.getItem("@travelGeo:recentSearches"));

Ich habe einen Wert aus dem asyncstorage abzurufen versucht, die nicht festgelegt worden sind.

im Emulator jedoch, als ich zuerst den Code schrieb, muss ich den "@travelGeo:recentSearches" Schlüssel eingestellt haben. Es funktioniert also auf dem Emulator, aber nicht auf dem physischen Gerät.

Verwandte Themen