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

标签 android ios asyncstorage

在 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/

相关文章:

javascript - Navigator 和 AsyncStorage react native

javascript - 在 native react 中获取存储的数据

android - 构建本地应用程序以唯一识别、跟踪和锁定智能手机

Android:扫描目录并显示图片(缩略图)(图片不存储在媒体存储中)

java - 单选按钮 : Listener in XML or JAVA?

ios - iOS "mobile web app"中的 location.reload(true) 在 safari 中重新打开

objective-c - TripIt 长久以来的代币

ios - 将点击处理程序添加到抽屉导航 MenuItem MaterialSwift

firebase - 在等待 Firebase 身份验证时在 native 应用程序中显示加载微调器

Android 对象动画不能正常工作