在React Native Realm数据库中更新一个值



我在我的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);

    }

只需创建模式的对象并更新特定字段的值。

相关内容

  • 没有找到相关文章

最新更新