将JSON响应的值存储到AsyncStorage React Native

时间:2018-06-12 02:54:01

标签: javascript reactjs react-native asynchronous

我正在尝试在AsyncStorage中存储一个用户ID(类型号),但这会引发以下错误:

Exception' - [_ NSCFNumber length]:在目标上调用multiset时抛出了发送到实例0xb0000000000000023的无法识别的选择器

带有params的AsyncLocalStorage(((userid,2))

请帮我解决这个问题。

class SignIn extends Component {

  loginHandler = async () => {
    this.setState({ loading: true });
    try {
      let { data } = await axios
        .post("http://offer.kdamjibhai.com/api/login", {
          username: this.state.username,
          password: this.state.password
        })
        .then(response => {
          if (response.data.status_code === 200) {
            if (response.data.data.status === "success") {
              //alert('came here ')
              AsyncStorage.setItem("loggedIn", "true");
              AsyncStorage.setItem('userid', response.data.data.user_info.user_id);
              
              this.setState({ loading: false });
              this.props.navigation.navigate("SignedIn");
            } 
          } else {
            alert(response.data.data.message);
            this.setState({ loading: false });
          }
        });
    } catch (err) {
      console.log(err);
    }
    
  };

  render() {}

}

export default SignIn;

2 个答案:

答案 0 :(得分:2)

您似乎正在尝试在AsyncStorage中存储对象或数字。 AsyncStorage仅支持要保存的字符串。如果user_id是数字,请在保存到AsyncStorage之前将其转换为字符串或使用JSON.syringify

答案 1 :(得分:2)

我已经尝试过你的代码,返回的useid是Number,而AsyncStorage只能存储字符串。所以你需要将userid转换为字符串然后你可以保存。您应该使用.then().catch()来处理错误,而不是try{} catch{}并删除async, await关键字,因为您使用的是.then().catch()语法。

loginHandler = () => {
  this.setState({ loading: true });
  axios
  .post("http://offer.kdamjibhai.com/api/login", {
    username: this.state.username,
    password: this.state.password
  })
  .then(response => {
    if (response.data.status_code === 200) {
      if (response.data.data.status === "success") {
        //alert('came here ')
        AsyncStorage.setItem("loggedIn", "true");
        AsyncStorage.setItem('userid', response.data.data.user_info.user_id.toString());
        this.setState({ loading: false });
        this.props.navigation.navigate("SignedIn");
      }
    } else {
      alert(response.data.data.message);
      this.setState({ loading: false });
    }
  })
  .catch((error) => {
    console.log(error);
  })
};