如何在Android中存储和检索Realm中的单个行/值

时间:2016-08-07 14:44:55

标签: android realm

我正在研究Realm DB。

但我致力于保存多行/值。

  

我想只保存一行。

我尝试了很多approches,但没有得到任何结果,事情是我也没有得到任何错误:(

如何应对这种情况?

1 个答案:

答案 0 :(得分:5)

定义架构:

public class Dog extends RealmObject {
    @PrimaryKey
    private long id;

    @Index
    private String name;

    public long getId() { return this.id; }
    public void setId(long id) { this.id = id; }
    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }
}

写入境界:

Realm realm = null;
try {
    realm = Realm.getDefaultInstance();
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            Dog dog = new Dog();
            dog.setId(1L);
            dog.setName("Fetch");
            realm.insertOrUpdate(dog);
        }
    });
} finally {
    if(realm != null) {
        realm.close();
    }
}

从数据库中检索(同步):

Dog dog = realm.where(Dog.class).equalTo("id", 1L).findFirst();
if(dog != null) {
    // dog
}

从数据库中检索(UI线程上的异步,0.84.0 +):

private RealmResults<Dog> dogs;
private final RealmChangeListener<Dog> listener = new RealmChangeListener<Dog>() {
    @Override
    public void onChange(RealmResults<Dog> dogs) {
        if(dogs.isValid()) {
           if(dogs.isEmpty()) {
              // dog does not exist
           } else {
              Dog dog = dogs.get(0);
              // dog exists
           }
        }
    }
};

dogs = realm.where(Dog.class).equalTo("id", 1L).findAllAsync();
dog.addChangeListener(realmChangeListener);