我正在尝试在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;
答案 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);
})
};