我在我的React Native Project中有一个领域数据库。我想在另一页中更新语言的价值。我最初能够写出该值,但是我被卡住了。以下是我的代码。
配置文件架构(领域数据库架构)
'使用严格';
import Realm from 'realm';
class Profile extends Realm.Object {}
Profile.schema = {
name: 'Profile',
properties: {
Onetime: 'string',
Name: 'string',
Email: 'string',
Phone: 'string',
Language:'string',
Url:'string',
},
};
export default new Realm({schema: [Profile]});
加载初始数据
let objects = realm.objects('Profile');
var name,url,phone,onetime;
if (firebase.auth().currentUser.displayName == null ) {
onetime= 'true';
name= 'Name';
url = 'https://media2.giphy.com/media/sbLpwwHlgls8E/giphy.gif';
phone = '0000000000';
}
else {
onetime= 'true';
name=firebase.auth().currentUser.displayName;
url=firebase.auth().currentUser.photoURL;
phone = '0000000000';
}
if (objects.length == 0) {
realm.write(() => {
realm.create('Profile', { Onetime: onetime, Name: name, Email: firebase.auth().currentUser.email, Phone:phone, Language: 'e', Url: url, });
});
}
else {
realm.write(() => {
realm.delete(objects);
realm.create('Profile', { Onetime: onetime, Name: name, Email: firebase.auth().currentUser.email, Phone:phone, Language: 'e', Url: url, });
});
}
活动我必须更新值
import React from 'react';
import {
ScrollView,
View,
StyleSheet
} from 'react-native';
import {
RkText,
RkTextInput,
RkAvoidKeyboard,
RkTheme,
RkStyleSheet
} from 'react-native-ui-kitten';
import {SocialSetting} from '../../components';
import {FontAwesome} from '../../assets/icons';
import {GradientButton} from '../../components';
import Avatar from 'react-native-interactive-avatar';
import ImagePicker from 'react-native-image-crop-picker';
import realm from '../../realm';
import firebase from 'firebase';
import {RkSwitch} from '../../components/switch/index';
import RadioForm, {RadioButton, RadioButtonInput, RadioButtonLabel} from 'react-native-simple-radio-button';
var radio_props = [
{label: 'English ', value: 'e' },
{label: 'Malayalam', value: 'm'}
];
var lange = '';
var objects = realm.objects('Profile');
export class ProfileSettings extends React.Component {
static navigationOptions = {
title: 'Profile Settings'.toUpperCase()
};
constructor(props) {
super(props);
this.state = {
name: objects[0].Name,
email: objects[0].Email,
phone: objects[0].Phone,
language:objects[0].Language,
url:objects[0].Url,
lang:''
}
}
pickimage(){
ImagePicker.openPicker({
width: 300,
height: 400,
cropping: true
}).then(image => {
console.log("imagelink- "+image);
});
}
handleLogOut() {
firebase.auth().signOut();
}
handleSave() {
alert("Language is: "+lange);
}
updateuser(){
var user = firebase.auth().currentUser;
user.updateProfile({
displayName: this.state.name,
email: this.state.email
}).then(function() {
alert("Update SuccessFull");
}).catch(function(error) {
// An error happened.
alert("Update Failed");
});
}
render() {
if (this.state.language == 'e') {
var val = 0;
}
else {
var val = 1;
}
return (
<ScrollView style={styles.root}>
<RkAvoidKeyboard>
<View style={styles.header}>
<Avatar
uri={this.state.url}
size={'default'}
/>
</View>
<View style={styles.section}>
<View style={[styles.row, styles.heading]}>
<RkText rkType='header6 primary'>INFO</RkText>
</View>
<View style={styles.row}>
<RkTextInput label='Name'
value={this.state.name}
rkType='right clear'
onChangeText={(text) => this.setState({name: text})}/>
</View>
<View style={styles.row}>
<RkTextInput label='Email'
value={this.state.email}
onChangeText={(text) => this.setState({email: text})}
rkType='right clear'/>
</View>
</View>
<View style={styles.section}>
<View style={[styles.row, styles.heading]}>
<RkText rkType='primary header6'>CHOOSE YOUR LANGUAGE</RkText>
</View>
<View>
<View style={styles.radio}>
<RadioForm
radio_props={radio_props}
initial={val}
onPress={(value) => {
{
this.setState({lang:value})
this.setState({language: this.state.lang})
lange = value;
}}}
/>
</View>
</View>
</View>
<GradientButton rkType='large' style={styles.button} text='SAVE' onPress={this.handleSave} />
<GradientButton rkType='large' style={styles.button} text='LOGOUT' onPress={this.handleLogOut}/>
</RkAvoidKeyboard>
</ScrollView>
)
}
}
let styles = RkStyleSheet.create(theme => ({
root: {
backgroundColor: theme.colors.screen.base
},
header: {
backgroundColor: theme.colors.screen.neutral,
paddingVertical: 25,
justifyContent: 'center',
alignItems: 'center'
},
section: {
marginVertical: 25
},
radio: {
flexDirection:'row',
margin:20
},
heading: {
paddingBottom: 12.5
},
row: {
flexDirection: 'row',
paddingHorizontal: 17.5,
marginTop:15,
borderBottomWidth: StyleSheet.hairlineWidth,
borderColor: theme.colors.border.base,
alignItems: 'center',
justifyContent: 'space-between',
flex:1
},
button: {
marginHorizontal: 16,
marginBottom: 32
}
}));
我想在 handlesave()
中更新语言的价值任何帮助都将不胜感激。
预先感谢。
解决了问题。这是解决方案
handleSave() {
//alert("Language is: "+lange);
let updt = realm.objects('Profile');
realm.write(() => {
updt[0].Language = lange;
});
alert("Language is: "+updt[0].Language);
}
只需创建模式的对象并更新特定字段的值。