React Native - Exception '- [NSNull length] - ошибка при переходе на страницу после выполнения функции - - PullRequest
0 голосов
/ 01 января 2019

Я новичок в реакции на родную и у меня проблема с моим приложением. Хотелось бы, чтобы вы помогли мне решить.
После того, как я отправил inpunt (комментарий) функции, я снова перехожу на страницу «search» и затем возвращаюсь на предыдущую страницу «player» (так что функция «setAllComments» с AsyncStorage.setItem будет вызвана снова,
Я получаю эту ошибку:

Exception '- [NSNull length]: нераспознанный селектор, отправленный на экземпляр 0x1cf86d9d0', был сгенерирован при вызове multiSet для целевого AsyncLocalStorage с параметрами (((("@ Ye-Музыка: песни "," null ")

Это происходит только после того, как я отправлю комментарий .

Вот процесс - gif process

Ошибка, которая приводит к сбою приложения:

enter image description here

Функции -

 async componentDidMount() {
  
    this.setAllComments();
  }

 
  setAllComments = async () => {
    console.log("setAllComments function!");
    fetch(URL + "/CommentsList2", {
      body: null,
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-type": "application/json; charset=UTF-8"
      }
    })
      .then(res => {
        return res.json();
      })
      .then(commentsResult => {
       AsyncStorage.setItem("@Ye-Music:comments", commentsResult.d);
      })
      .catch(err => {
        console.error(err);
      })
      .then(() => this.getComments());
  };



  async getComments() {
    await AsyncStorage.getItem("@Ye-Music:comments").then(value => {
      let commentsList = JSON.parse(value);
      this.setState({ comments: commentsList });
    });
  }

 

  addComment = async () => {
    await this.getUser();
    if (this.state.haveUser) {
      if (this.state.userText == "") {
        Alert.alert("comment can't be empty");
        return;
      } else if (this.state.userText.length <= 2) {
        Alert.alert("Comment must be longer than 2 chars");
        return;
      }
      this.setState({ haveUser: false });
      this.setState({ userText: this.state.userText.replace(/["]/g, "'") });

      let data = {
        userId: this.state.userData.ID,
        songId: this.state.song.Song_ID,
        username: this.state.userData.UserName,
        freeText: this.state.userText
      };
      fetch(URL + "/AddComment", {
        body: JSON.stringify(data),
        method: "POST",
        headers: {
          "Content-type": "application/json; charset=UTF-8"
        }
      })
        .then(res => {
          return res.json();
        })
        .then(commentData => {
          AsyncStorage.setItem("@Ye-Music:comment", commentData.d)
          .catch(err => {
            console.error(err);
          });
          let newCommentNow = AsyncStorage.getItem("@Ye-Music:comment").then(()=>
          {     let newUserComment = JSON.parse(newCommentNow);
            this.setState({ newComment: newUserComment });})
     
        })

        .then(this.setState({ writeComment: false, userText: "" }))
        .then(this.setAllComments())
        .then(
          Alert.alert("Re-open the song to see your comment", "", [
            { text: "Ok", onPress: () => null }
          ])
        );
    }


Может кто-нибудь помочь мне решить эту проблему.

...