Сохранение значения из JSON-ответа в AsyncStorage React Native - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь сохранить идентификатор пользователя (тип Number) в AsyncStorage, но при этом выдается следующее сообщение об ошибке:

Исключение '- [_ NSCFNumber length]: нераспознанный селектор, отправленный экземпляру 0xb000000000000002323, был сгенерирован при вызове мультисети для цели

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 голосов
/ 12 июня 2018

Я попробовал ваш код, возвращенный идентификатор пользователя - это Number, а AsyncStorage может хранить только строки.Таким образом, вам нужно преобразовать идентификатор пользователя в строку, а затем вы можете сохранить.Вы должны использовать .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);
  })
};
0 голосов
/ 12 июня 2018

Кажется, вы пытаетесь сохранить объект или номер в AsyncStorage.AsyncStorage поддерживает только строку для сохранения.Если user_id является числом, преобразуйте его в строку или используйте JSON.stringify перед сохранением в AsyncStorage.

Сначала вы можете преобразовать свой ответ в строку с помощью JSON.stringify, а когда вы снова получите объект, вы можете использоватьJSON.parse чтобы получить объект снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...