我正在尝试将用户输入添加到AsyncStorage内的特定数组中。我不确定我当前的代码是否正在执行此操作。我无法通过“ alert()”显示它,目前我收到此错误:
the bind value at index 1 is null"
async addAvailableActivity(){
try {
AsyncStorage.getItem('availableActivities')
.then(activities => {this.availableActivities = JSON.parse(activities)})
} catch (error) {
alert('Couldnt load activities!')
}
let newActivity = this.state.newActivity
this.availableActivities.push(newActivity)
try {
AsyncStorage.setItem('availableActivities', JSON.stringify(this.availableActivities))
} catch (error) {
alert('Couldnt add activity!')
}
}
async displayAvailableActivities(){
AsyncStorage.getItem(this.availableActivities).then(activities => {alert(activities)})
}
答案 0 :(得分:0)
您的代码存在一些问题,首先,如果您希望像这样对它进行范围设置,我将在您的组件状态中存储availableActivities
。其次,当您调用函数async
时,应使用await
来实现承诺,第三个也是最重要的AsyncStorage.getItem(this.availableActivities)
似乎是一个错字,但是AsyncStorage
键值对< em>必须是字符串。
这是您代码的更新,我认为它将提供您正在寻找的功能:
addAvailableActivity = async () => {
try {
let activities = await AsyncStorage.getItem('availableActivities')
let { newActivity } = this.state
if (activities != null) {
activities = JSON.parse(activities)
activities.push(newActivity)
await AsyncStorage.setItem( 'availableActivities', JSON.stringify(activities) )
}
} catch (error) {
console.warn(error)
}
}
displayAvailableActivities = () => {
let activities = await AsyncStorage.getItem('availableActivities')
console.warn(JSON.parse(activities))
}
请注意,我更改了函数声明,这不是必需的,但是可以防止将它们绑定到构造函数中。 async / await
是.then
的替代语法,它更简洁,更易于阅读。要检查AsyncStorage是否返回值,最好针对null
对其进行测试,最后,我在最后一个函数中修复了错字。让我知道您是否有任何疑问或我错过了标记
答案 1 :(得分:0)
此行
AsyncStorage.getItem(this.availableActivities).then(activities => {alert(activities)})
应该是
AsyncStorage.getItem('availableActivities').then(activities => {alert(activities)})
答案 2 :(得分:0)
我认为问题在于您使用的AsyncStorage会以这种方式导致Async。我认为您的代码将以这种方式工作:
async addAvailableActivity(){
try {
AsyncStorage.getItem('availableActivities')
.then(activities => {this.availableActivities = JSON.parse(activities)
let newActivity = this.state.newActivity
this.availableActivities.push(newActivity)
})
} catch (error) {
alert('Couldnt load activities!')
}
try {
AsyncStorage.setItem('availableActivities', JSON.stringify(this.availableActivities))
} catch (error) {
alert('Couldnt add activity!')
}
}
此功能之后,您还需要不完全使用它。在其他地方使用它。
async displayAvailableActivities(){
AsyncStorage.getItem(this.availableActivities).then(activities => {alert(activities)})
}
答案 3 :(得分:0)
好像您试图以不正确的方式获取商品。
async displayAvailableActivities(){
AsyncStorage.getItem(this.availableActivities).then(activities => {alert(activities)})
}
getItem的第一个参数应为字符串:
async displayAvailableActivities(){
AsyncStorage.getItem('availableActivities').then(activities => {alert(activities)})
}