GetItem с AsyncStorage в React Native не работает

Я новичок в реагировании на родной язык, и получение значения привязки в индексе 1 равно null, когда я пытаюсь получить данные из AsyncStorage в response-native, ниже мой код.

Alert.alert(
        'Info',
        'React AsyncStorage',
        [
            {text: 'Get Data',onPress: () => this.getValue('name'),},
            {text: 'Save Data', onPress: () => this.saveValue('name', 'abc'),}
        ],
        {cancelable: false},
        );


async saveValue(key:String, value:bool) {
     AsyncStorage.setItem(key, value);
     Alert.alert('Data', 'saving');         
}
async getValue(key) {         
    // try {
    //     await AsyncStorage.getItem(Constant.SHOW_INTRO).then((value) =>
    //         console.log(`AsyncStorage GET for Constant.SHOW_INTRO: "${value}"`));

    // } catch (error) {
    //     Alert.alert('Error', 'Error retrieving data');
    // }

    try {
        const value = await AsyncStorage.getItem(key)
        console.log(`AsyncStorage GET for "${key}": "${value}"`);
    } catch (error) {
        Alert.alert('Error', 'Error retrieving data');
    }
}

Пожалуйста помоги.


person Angel    schedule 17.05.2019    source источник
comment
Привет, @angel, можете ли вы воспроизвести проблему на snack.expo.io?   -  person Ewomazino Ukah    schedule 17.05.2019
comment
@MazinoSUkah Я пробовал на вашем сайте рекомендаций. Этот код отлично работает на этом. Я не могу найти проблему с моей средой.   -  person Angel    schedule 17.05.2019
comment
пожалуйста, дайте ссылку   -  person Ewomazino Ukah    schedule 17.05.2019
comment
Мой код отлично работает с snack.expo.io. У меня проблема со средой кода Visual Studio.   -  person Angel    schedule 17.05.2019


Ответы (2)


Вы можете использовать этот формат:

setData = (value) => {
    // if value is an Object use this: value = JSON.stringify(value)
    // if value is a number use this: value = value.toString()
    AsyncStorage.setItem('myKey', value, () => {
        console.warn('Done!')
    })
}

getData = () => {
    AsyncStorage.getItem('myKey').then(storage => {
        console.warn(storage)
    }).catch(e => console.warn(e))
}

Потом:

this.setData('sample text') 

Изменить:

AsyncStorage требуется некоторое время для получения данных, поэтому он возвращает обещание, пока значение не станет доступным. Вы должны вызвать функцию then() и получить оттуда значение. Все, что находится внутри функции then(), вызывается после получения значения из хранилища.

person Milad Jafari    schedule 17.05.2019

Попробуйте сделать это так:

async getValue(key){
  try {
    const value = await AsyncStorage.getItem(key)
    console.log(`AsyncStorage GET for "${key}": "${value}"`);
  } catch (error) {
    Alert.alert('Error', 'Error to retrieve data');
  }
}
person Roc Khalil    schedule 17.05.2019
comment
@Angel, тогда вы можете опубликовать весь компонент / кусок кода, чтобы мы знали полный контекст, пожалуйста? - person Roc Khalil; 17.05.2019
comment
Я думаю, что это проблема, связанная с самим Android, а не с React Native. - person Roc Khalil; 17.05.2019
comment
Вы знаете, в чем моя проблема с окружающей средой? Поскольку этот код отлично работает на веб-сайте snack.expo.io - person Angel; 17.05.2019
comment
@Angel, возможно, это что-то связано с ЗАО github.com/react-native-community/ jsc-android-buildscripts - person Roc Khalil; 17.05.2019