2016-07-15 60 views
2

在Android中使用IntentService中的where子句如果我使用where子句,前7或8次它給了我所需的輸出,但經過一定時間後,它會失敗並給出0爲結果即使數據存在realmDB,領域where子句返回0

Realm realm = Realm.getInstance(ApplicationController.getInstance().getRealmConfig(Constants.SCHEMA_LIVE)); 
      RealmResults<RContactDTO> localContacts = realm.where(RContactDTO.class).equalTo("operationType", HttpOperation.PUT.name()).findAll(); 
      Utils.Log("update contact count ::: " + localContacts.size(), Utils.LogType.DEBUG); 
      ArrayList<ContactDTO> contactList = new ArrayList<ContactDTO>(); 
      RContactDTO rContactDTO = null; 
      for(RContactDTO rContact : localContacts){ 
       contactList.add(new ContactDTO(rContact)); 
      } 

我已通過導出realmDB檢查了實際數據。

+0

因此,你運行相同的代碼9次,它的工作8次,不工作9日? –

+0

是的第9次後,它是隨機工作,這是不可預知的 –

+0

而且嘗試之間沒有發生任何事情? –

回答

1

我在Swift中遇到了同樣的問題。領域有自動刷新的問題。

使用 realm.refresh()在做你的子句之前。

+0

感謝它的工作就像一個魅力 –

+1

等等,什麼? Realm-Java在0.90.0中棄用'refresh()',並在1.0.0中將其刪除。這不是一個解決方案。自動刷新在實際循環的循環線程上工作得很好;而非循環線程則意味着使用'waitForChange()'來更新。 – EpicPandaForce

2

在IntentService中,您位於不循環的循環線程。這意味着您的Realm無法在IntentService的線程上自動更新,並且無法等待更改。因此,解決方法是使用普通線程並使用waitForChange()而不是IntentService,或者在不再需要某個操作時關閉Realm,然後使用getDefaultInstance()重新打開它。

+0

我一定會嘗試它,讓你知道在這個線程 –

相關問題