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.