React native JSONparse-won';与检索到的项目无关

React native JSONparse-won';与检索到的项目无关,react-native,react-native-android,React Native,React Native Android,我正在编写一个简单的应用程序,我想将用户信息存储在设备上,并将其包含在POST请求中,而不必不断向用户索要。所以我想:“让我们把它们保存在设备上吧!” 我已经设法存储了它们,但当我检索它们时,我就是不知道如何将其JSONparse回dict 以下是调用AsyncStorage.getItem时得到的结果: I/ReactNativeJS(31854):##存储-检索到的数据:[对象] 当我试图通过JSONparse传递该信息时,我得到“JSON解析错误:意外的标识符‘未定义’” 这是我的密码:

我正在编写一个简单的应用程序,我想将用户信息存储在设备上,并将其包含在POST请求中,而不必不断向用户索要。所以我想:“让我们把它们保存在设备上吧!”

我已经设法存储了它们,但当我检索它们时,我就是不知道如何将其JSONparse回dict

以下是调用AsyncStorage.getItem时得到的结果:

I/ReactNativeJS(31854):##存储-检索到的数据:[对象]

当我试图通过JSONparse传递该信息时,我得到“JSON解析错误:意外的标识符‘未定义’”

这是我的密码:

storage.js:

import React, { Component } from 'react';
import {
  AsyncStorage,
} from 'react-native';

module.exports = {
  save: function(key, data){
    //console.log(save key:${key} data:${data} stringify:${JSON.stringify(data)});
    try {
      AsyncStorage.setItem(key, JSON.stringify(data));
      //console.log(Storage.save() key => value, ${key} => ${JSON.stringify(data)});
      return true;
    } catch(err) {
      //console.log(save: ERROR ${err});
      return false;
    }
  },
  read: async function(key) {
    //console.log(reading key:${key});
    try {
      var data = await AsyncStorage.getItem(key);
      if (data !== null){
        //console.log("Storage.read(): " + typeof(JSON.parse(data)) + ":" + JSON.parse(data));
        return JSON.parse(data);
      }else {
        //console.log("Storage.read(): Not found");
        return false;
      }
    } catch (err) {
      //console.log('Storage.read(): error: ' + err.message);
      return false;
    }
  },
  empty: function(key){
    try {
      AsyncStorage.setItem(key, '');
      //console.log(Storage.empty: cleaning key ${key});
      return true;
    } catch(err) {
      //console.log(Storage.empty: ERROR ${err});
      return false;
    }
  }
}
index.android.js:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  View,
  TouchableHighlight,
  Alert,
  Image,
  AsyncStorage,
  TextInput,
} from 'react-native';
import { Container, Button, Text } from 'native-base';

import BackgroundImage from './background.js'

var storage = require('./storage.js');

var form_style = require('./formstylesheet.js');

var t = require('tcomb-form-native');
var Form = t.form.Form;

var Person = t.struct({
  Nombre: t.String,
  Apellido: t.String,
  Celular: t.String,
  Lote: t.String,
});

var options = {
  stylesheet: form_style
};


class UserInfo extends Component {
  onPress() {
    var value = this.refs.form.getValue();
    storage.save('username', JSON.stringify(value.Nombre));
    var data = storage.read('username');
    }

  render() {
    return (
      <Image source={require('./images/background.jpg')} style={styles.image_container}>
      <View style={styles.input_container}>
        <Form
          ref="form"
          type={Person}
          options={options}
        />
        <TouchableHighlight style={styles.save_button} onPress={this.onPress.bind(this)} underlayColor='#99d9f4'>
          <Text style={styles.buttonText}>Guardar</Text>
        </TouchableHighlight>
      </View>
      </Image>
    )
  }
}
import React,{Component}来自'React';
进口{
评估学,
样式表,
看法
触控高光,
警觉的,
形象,,
异步存储,
文本输入,
}从“反应本机”;
从“本机基”导入{容器、按钮、文本};
从“./background.js”导入背景图像
var storage=require('./storage.js');
var form_style=require('./formstylesheet.js');
var t=require('tcomb-form-native');
var Form=t.Form.Form;
var Person=t.struct({
名称:t.字符串,
阿佩利多:t.弦,
塞勒尔:t.弦,
洛特:t.弦,
});
变量选项={
样式表:表单样式
};
类UserInfo扩展组件{
onPress(){
var value=this.refs.form.getValue();
save('username',JSON.stringify(value.Nombre));
var data=storage.read('username');
}
render(){
返回(
瓜达尔
)
}
}
不确定解决问题所需的一切是否都在这里。如果我遗漏了什么,或者需要更多的片段,请告诉我


提前谢谢

所有
异步存储
的方法都返回一个
承诺
。在您的第二个代码段中,您正在按
onPress
调用
.save()
,它调用
AsyncStorage.setItem
。紧接着,您将调用
.read()
,它将调用
异步存储.getItem
。你不是在等待
setItem
承诺的解决方案,因此你收到的是未定义的。嗯!新手问题!谢谢你。我会试试看。