在React-native

时间:2018-09-20 13:53:25

标签: javascript json database react-native asyncstorage

我正在尝试将用户输入添加到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)})    
}

4 个答案:

答案 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)})    
}

AsyncStorage getItem