2016-07-15 11 views
2

Im whereent句をandroidで使用しています。最初の7〜8回where句を使用すると、目的の出力が得られますが、 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でそれを削除しました。これは解決策ではありません。自動リフレッシュは実際にループするルーパースレッドでうまく動作します。 non-looperスレッドは 'waitForChange()'を使用して更新することを意図しています。 – EpicPandaForce

2

IntentServiceではループしないルーパースレッドを使用しています。つまり、RealmはIntentServiceのスレッド上で自動更新できず、変更を待つこともできません。回避策は、通常のスレッドを使用して、IntentServiceの代わりにwaitForChange()を使用するか、操作のために領域が不要になったときに領域を閉じてから、getDefaultInstance()で再度開きます。

+0

私は確かにそれを試してみて、このスレッドで知らせる –

関連する問題