领域findAll()有时空吗?

时间:2016-09-06 04:01:40

标签: android realm

 AsyncTask.execute(new Runnable() {
   @Override public void run() {
     if (isbackendLoad){   
     // Backend load  I must use syn retrofit because some reason.
     // saveResulttoRealm
     } else {
     final Realm realm = Realm.getDefaultInstance();
     RealmResults<RealmAnimal> realmAnimals =
     realm.where(RealmAnimal.class).equalTo("DogId",DogId,    Case.INSENSITIVE).findAll();
     }
   }
 });

在动物中我有DogId字段。我检查领域浏览器,它有动物与DogId但结果是空的。没有AsyncTask.exe的这个领域查询工作正常。原因是AsyncTask.execute?但我必须使用for Syn Retorfit,没有它改装返回null。 一些线程Ex:Async#1返回null,Aysnc other有结果!= null。

3 个答案:

答案 0 :(得分:1)

你应该在正确的时间得到结果。完全在AsyncTask完成之后。在此过程之前将返回null。检查finally {中的返回值,它会告诉您问题发生在哪里。

答案 1 :(得分:0)

试试这个

realm.where(RealmAnimal.class)
                .equalTo("DogId", DogId, Case.INSENSITIVE)
                .or()
                .contains("DogId", DogId, Case.INSENSITIVE)
                .findAll();

否则你可能会遇到问题&#34; DogId&#34;因为那是列名,并且必须与数据库表中定义的相同

答案 2 :(得分:0)

我通过创建一个线程进行保存并从域中获取来解决这些问题。

AsyncTask.execute(new Runnable() {
    @Override public void run() {
      if (isbackendLoad){   
     // Backend load  I must use syn retrofit because some reason.
     //handler.post(() -> saveResulttoRealm;
     } else {
      handler.post(new Runnable(){
       @Override public void run() {
     final Realm realm = Realm.getDefaultInstance();
     RealmResults<RealmAnimal> realmAnimals =
     realm.where(RealmAnimal.class).equalTo("DogId",DogId,    Case.INSENSITIVE).findAll(); 
     }
     });
   }
 });