gpt4 book ai didi

android - AsyncStorage 不适用于 Android,在 iOS 中正常

转载 作者:行者123 更新时间:2023-11-29 16:29:01 24 4
gpt4 key购买 nike

在 iOS 上,一切正常。我只有几个项目要添加,它们都是文本字符串,但即便如此我还是使用 JSON.stringify。这是在我的设置页面上:

在渲染中我有一个开关:

  <Switch
onValueChange = {(languageObject, switchID) => this.toggleLang("ENG", "switchENG")}
value = {this.state.switchENG}/>

运行这个函数:

 toggleLang = (language, switchID) => {
const myStates = ["switchENG", "switchFRC", "switchSPN"];
for(let i = 0; i < myStates.length; i++) {
if(myStates[i] === switchID) {
this.setState({[myStates[i]]: true});
} else {
this.setState({[myStates[i]]: false});
}
};
this.storeData("language", language);
}

运行这个函数:

  storeData = async (key, value) => {
try {
await AsyncStorage.setItem(key, JSON.stringify(value));
}
catch(error) {
console.log("You got this error: " + error);
}

然后在我的主页/屏幕中,我有:

 componentDidMount() {  // Listen for when the screen is focused
const { navigation } = this.props;
this.focusListener = navigation.addListener("didFocus", () => {
this.getData();
});

运行这个函数:

  getData = async () => {
try { // get the language (ENG/FRC/SPN etc)
await AsyncStorage.getItem("language").then((value) =>{
this.setState({selLang: value});
});
}
catch(error) {
alert("You got this error: " + error);
}
}

我将我的屏幕临时设置为不使用 AsyncStorage 进行渲染,只是为了测试目的,一个函数绑定(bind)到开关,当切换时,调用该函数来获取语言项并将标签的文本项更改为新语言.

正如我所说,在 iOS 上一切正常,我可以在语言之间切换,并且在我重新加载应用程序时所有这些都会保留。

我正在使用博览会。在终端我得到: react native --v react native cli:2.0.1 react native :0.59.8

当我在 Android 中切换开关时,我得到:

 TypeError: undefined is not an object (evaluating "lang.a10")

这似乎表明它没有从 AsyncStorage 收到任何东西。

我真的希望我的应用程序在离线时运行,所以服务器商店不是我想要的。 AsyncStorage 是完美的。但它不适用于 Android。

最佳答案

如果您只想保存字符串,则不应使用 JSON.stringify。如果你想像这样保存对象,那么你可以使用 JSON.stringify

let value = {
age: 31,
traits: {eyes: 'blue', shoe_size: 10},
};
await AsyncStorage.setItem(key, JSON.stringify(value));

请更改此

await AsyncStorage.setItem(key, JSON.stringify(value));

await AsyncStorage.setItem(key,value);

所以当你收到它时,它会给你字符串而不是这些行中的对象

await AsyncStorage.getItem("language").then((value) =>{
this.setState({selLang: value});
});

关于android - AsyncStorage 不适用于 Android,在 iOS 中正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57837858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com