2016-07-15 1 views
2

Im, используя предложение where в IntentService в android, Если я использую предложение where в первые 7 или 8 раз, он дает мне желаемый результат, но через определенное время он терпит неудачу и дает 0 для результатаПредложение Realm where возвращает 0, даже если данные присутствуют в realmDB

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

У меня была такая же проблема в Свифт. В Realm есть проблема с автоматическим обновлением.

Используйте realm.refresh() перед тем, как сделать свою статью.

+0

спасибо, что он работает как шарм –

+1

Подождите, что? Realm-Java устарела 'refresh()' в 0.90.0 и удалила ее в 1.0.0. Это не решение. Автообновление отлично работает на потоках петлителя, которые фактически зацикливаются; и потоки non-looper предназначены для использования 'waitForChange()' для обновления. – EpicPandaForce

2

В IntentService вы находитесь в потоке петлителя, который не работает. Это означает, что ваше Realm не может автоматически обновлять поток IntentService, и он не может ждать изменений. Таким образом, обходной путь заключается в том, чтобы либо использовать обычный поток, либо использовать waitForChange() вместо IntentService или закрыть Realm, когда он больше не нужен для операции, а затем повторно открыть его с помощью getDefaultInstance().

+0

Я обязательно попробую и дам вам знать в этой теме –

Смежные вопросы