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