Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update a value in React Native Realm Database

I have a realm database in my React Native Project. I want to update the value of the language in another page. I was able to write the value initially but am I Am stuck updating it. Below is my code.

Profile Schema (Realm Database Schema)

'use strict';

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]});

Loading Initial Data

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, });
    });


    }

Activity where I have to update the value

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
  }
}));

I want to update the value of language in the handleSave()

Any help would be highly appreciated.

Thanks in Advance.

like image 617
Vishnu M Menon Avatar asked Nov 29 '17 06:11

Vishnu M Menon


People also ask

How do I delete data from realm in react native?

To delete all objects from the realm, call Realm. deleteAll() inside of a write transaction.


1 Answers

Solved the problem. Here is the solution

handleSave() {

          //alert("Language is: "+lange);
          let updt = realm.objects('Profile');
          realm.write(() => {
            updt[0].Language = lange;
});

      alert("Language is: "+updt[0].Language);


    }

Just create an object of the schema and update the value of the particular field.

like image 115
Vishnu M Menon Avatar answered Dec 14 '22 07:12

Vishnu M Menon