在android中保存和检索领域数据库中的数据

在android中保存和检索领域数据库中的数据,android,database,realm,crud,realm-mobile-platform,Android,Database,Realm,Crud,Realm Mobile Platform,嗨,我使用realm将数据保存到relam数据库中,但它不将数据保存到数据库中 在我的申请课上 Realm.init(this); RealmConfiguration config = new RealmConfiguration.Builder().build(); Realm.deleteRealm(config); Realm.setDefaultConfiguration(config); 在我的储蓄活动中 public void

嗨,我使用realm将数据保存到relam数据库中,但它不将数据保存到数据库中

在我的申请课上

Realm.init(this);
        RealmConfiguration config = new RealmConfiguration.Builder().build();
        Realm.deleteRealm(config);
        Realm.setDefaultConfiguration(config);
在我的储蓄活动中

  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());
            }
        });
当我检索到一个值时

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;
    } 
当我从数据库检索令牌时,它返回null


有什么想法吗?

你能试试这个保存功能吗:

// 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();
  }
}
Realm realmDB; 
在代码中,您缺少调用

realm.insertOrUpdate(user)

内部executeTransaction函数。

在onCreate函数之前声明领域对象:

// 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();
  }
}
Realm realmDB; 
现在在onCreate方法中写入以下行:

Realm.init(this);
realmDB=Realm.getDefaultInstance(); 
在“保存”按钮上单击方法:

  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();
     }
要获取记录,请执行以下操作:

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(); 
        }
要删除记录,请执行以下操作:

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

我不知道您何时在哪个线程上调用getUserToken。@EpicPandaForce主线程在这种情况下,只有当userData.getToken为null时,才可能执行此操作。@EpicPandaForce在保存时,我调试了该值。可能是因为我缺少realm.insertOrUpdate它没有保存值,所有realm执行都需要它吗?您使用realm.createObject立即创建托管实例,因此setToken将被持久保存在数据库中,所以不一定。这是我的保存代码。它保存数据,但我的数据没有显示“是”用于保存数据。“是”用于保存数据。请不要仅将代码作为答案发布,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。