George Thomas
George Thomas

Reputation: 4586

Saving and retrieving data from realm database in android

Hi i used realm to save data into relam database but its not saving data to database

In my application class

Realm.init(this);
        RealmConfiguration config = new RealmConfiguration.Builder().build();
        Realm.deleteRealm(config);
        Realm.setDefaultConfiguration(config);

In my saving activity

  public void SaveUserData(final UserData userData, Realm realm)
    {
        final String userdata = new Gson().toJson(userData);
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
//                realm.createObjectFromJson(com.mediquick.databaseModel.UserData.class, userdata);

                com.mediquick.databaseModel.UserData user = realm.createObject(com.mediquick.databaseModel.UserData.class);
                user.setLname(userData.getLname());
                user.setEmail(userData.getEmail());
                user.setToken(userData.getToken());
                user.setAddress(userData.getAddress());
                user.setMobile_no(userData.getMobile_no());
                user.setDob(userData.getDob());
                user.setName(userData.getName());
                user.setProfile_pic(userData.getProfile_pic());
                user.setUser_type(userData.getUser_type());
            }
        });

And when i retrieve a value

public String getUserToken(Realm realm)
    {
        final com.mediquick.databaseModel.UserData user = realm.where(com.mediquick.databaseModel.UserData.class).findFirst();
        return  (user!=null)?user.getToken():null;
    } 

It gives null back when i retrive token from the database

Any ideas..

Upvotes: 0

Views: 9225

Answers (3)

public void saveData(){
    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm bgRealm) {
            Students students = bgRealm.createObject(Students.class);
            students.setName(name.getText().toString().trim());
            students.setCity(city.getText().toString().trim());
            students.setDegree(degree.getText().toString().trim());
            students.setGender(gender.getSelectedItem().toString().trim());
        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            // Transaction was a success.
        }
    }, new Realm.Transaction.OnError() {
        @Override
        public void onError(Throwable error) {
            // Transaction failed and was automatically canceled.
        }
    });
}

Upvotes: 0

Wajid khan
Wajid khan

Reputation: 872

Declare Realm Object before onCreate function:

Realm realmDB; 

Now write these line in onCreate Method:

Realm.init(this);
realmDB=Realm.getDefaultInstance(); 

On save button click method:

  try{
         realmDB.beginTransaction();
         UserSchedule us = realmDB.createObject(UserSchedule.class);
         us.setId(userData.get_ID());
         us.setDate(userData.getDate()); 
         realmDB.commitTransaction();
     }
     catch (Exception ex){
           Log.d("RError",ex.toString());
       Toast.makeText(this, "Error in realm", Toast.LENGTH_SHORT).show();
     }

To get records:

RealmResults<UserSchedule>userSchedules=realmDB.where(UserSchedule.class).findAll();
        for (UserSchedule userSchedule:userSchedules)
        {
           Toast.makeText(this,userSchedule.getId(), Toast.LENGTH_SHORT).show();
           Toast.makeText(this, userSchedule.getId(), Toast.LENGTH_SHORT).show(); 
        }

To delete record:

 RealmResults<UserSchedule> result = realmDB.where(UserSchedule.class).findAll();

UserSchedule userSchedule = result.where().equalTo("Id", getItem(position).getS_ID()).equalTo("Date",getItem(position).getDate()).findFirst();
if(userSchedule!=null)
{

if (!realmDB.isInTransaction()) 
{
    realmDB.beginTransaction();
}
 userSchedule.deleteFromRealm();
 realmDB.commitTransaction();
}
else
{
Toast.makeText(this,"No Record.", Toast.LENGTH_SHORT).show();
}

Upvotes: 1

Khang Tran
Khang Tran

Reputation: 467

Could you try this save function:

// SAY YES TO THIS
Realm realm = null;
try {                          // I could use try-with-resources here
    realm = Realm.getDefaultInstance();
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            realm.insertOrUpdate(dog);
        }
    });
} finally {
  if(realm != null) {
    realm.close();
  }
}

In your code you are missing call

realm.insertOrUpdate(user)

inside executeTransaction function.

Upvotes: 0

Related Questions