android 索引1处的绑定值为空,正在从react-native中的asyncstorage获取数据

llycmphe  于 2023-02-06  发布在  Android
关注(0)|答案(4)|浏览(117)

我正在尝试用来自多个数组的数据生成按钮。
其中一个数组是动态的,它在constructor()中生成。
问题是,当我试图导航到屏幕时,我收到一条错误消息,说"索引1处的绑定值为空"。错误没有指向我代码中的任何一行,相反,它说这个问题与sqlite和asyncstorage有关。
我不知道为什么会发生这种情况,但可能与generatedData状态没有正确初始化有关。
我不知道该怎么办才能解决这个问题,任何帮助都将不胜感激。
下面是代码:

import React, { Component } from 'react';

import {
  Text,
  View,
  TouchableOpacity,
} from 'react-native';

class DataApp extends Component {
  constructor() {
    super()
    this.state = {
      dataLocalIds: [
        "data1Data",
        "data2Data",
        "data3Data",
        "data4Data",
        "data5Data",
        "data6Data"
      ],
      dataLabel: [
        "[ data 1 ]",
        "[ data 2 ]",
        "[ data 3 ]",
        "[ data 4 ]",
        "[ data 5 ]",
        "[ data 6 ]",
      ],
      generatedData: [],
    }

    this.state.dataLocalIds.map((value, index) => {
      this.data = this.getDatas(value);
    })
  }

  async getDatas(value) {
    try {
      const value = await AsyncStorage.getItem(value).then(val => {
        let jsonInit = {};
        jsonInit[value] = value;
        let newArray = this.state.generatedData;
        newArray.push(jsonInit);
        this.setState(generatedData: newArray);
        return JSON.parse(val)
      });
      return value
    } catch (err) {
      throw err
    }
  }

  renderScreen = () => {
      var myData =  JSON.parse(this.state.generatedData);
      return (
          {this.state.dataLabel.map((item, index) => {
            return(
              <TouchableOpacity onPress={}>
                <Text>{this.state.generatedData[index] === "{}" ? item : "foo: " + generatedData.foo + " / bar: " + generatedData.bar}</Text>
              </TouchableOpacity>
              )
            })}
      );
  }

  render() {
    return (
      this.renderScreen()
    );
  }
}
export default DataApp;
xxhby3vn

xxhby3vn1#

我有这个问题,这是因为我已经发送空值到AsyncStorage.getItem(),当我改变它。它解决了。

eni9jsuy

eni9jsuy2#

当您尝试在应用程序启动/注册之前使用AsyncStorage时,可能会出现此问题。
如果是这样,尝试将调用AsyncStorage的代码移到componenDidMount/useEffect钩子(在执行此逻辑时,可以呈现加载/空视图)。

eaf3rand

eaf3rand3#

但是我在使用一个 Package AsyncStorage的库时也遇到了同样的错误,这个库叫做react-native-simple-store,问题是我试图使用一个还没有准备好的变量从存储中获取数据(它是空的/未定义的)。这个变量只有在渲染后的某个时间后才会准备好。所以我所做的是添加一个if条件,如果它的空值不做任何事情,当状态改变并且组件重新呈现时,变量现在就绪,因此它将进入if语句并访问存储。

osh3o9ms

osh3o9ms4#

首先你应该import {AsyncStorage} from 'react-native'
那么你必须定义一个唯一的键
const ASYNC_STORAGE_COMMENTS_KEY = 'ANYTHING_UNIQUE_STRING'
调用AsyncStorage.setItem时,第一个参数应为ASYNC_STORAGE_COMMENTS_KEY,第二个参数应为使用stringify的json数据
例如AsyncStorage.setItem(ASYNC_STORAGE_COMMENTS_KEY, JSON.stringify(data));
并用于获取
const your_var = await AsyncStorage.getItem(ASYNC_STORAGE_COMMENTS_KEY);

相关问题