Я новичок в реакции на родную и у меня проблема с моим приложением. Хотелось бы, чтобы вы помогли мне решить.
После того, как я отправил inpunt (комментарий) функции, я снова перехожу на страницу «search» и затем возвращаюсь на предыдущую страницу «player» (так что функция «setAllComments» с AsyncStorage.setItem будет вызвана снова,
Я получаю эту ошибку:
Exception '- [NSNull length]: нераспознанный селектор, отправленный на экземпляр 0x1cf86d9d0', был сгенерирован при вызове multiSet для целевого AsyncLocalStorage с параметрами (((("@ Ye-Музыка: песни "," null ")
Это происходит только после того, как я отправлю комментарий .
Вот процесс -
Ошибка, которая приводит к сбою приложения:
Функции -
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 }
])
);
}
Может кто-нибудь помочь мне решить эту проблему.