2016-05-31 2 views
1

Мне нужно сделать одну простую вещь: когда мое поле, в предыдущем состоянии которого было null, становится ненулевым, делайте что-нибудь один раз. Если это было не занудно, представление должно также выполняться один раз. Для этого я создал этот код:Звонок на объект, получающий ненулевой один раз

Observable.just(object).filter(new Func1<Object, Boolean>() { 
      @Override 
      public Boolean call(Object o) { 
       return o != null; 
      } 
     }).subscribe(new Action1<Object>() { 
      @Override 
      public void call(Object o) { 
       Toast.makeText(MainActivity.this, "Object is non-null", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

Хотя это не работает. Что мне делать?

Любая помощь была бы любезно оценена.

+0

Вы уверены, что ваш объект не является нулевым? Я тестировал ваш код, и он отлично работал для меня, вы можете добавить 'System.out.println (o! = Null);' в вызове фильтра и проверить его. – psantamaria

ответ

1

Вы можете использовать BehaviorSubject для хранения значения и применить distinctUntilChanged с нулевым чеком, чтобы реагировать на изменения:

BehaviorSubject<Object> bs = BehaviorSubject.create(); 

bs.distinctUntilChanged(v -> v != null) 
.doOnNext(v -> System.out.println(v)) 
.subscribe(); 

bs.onNext(1); 
bs.onNext(2); 
bs.onNext(null); 
bs.onNext(null); 
bs.onNext(3); 
Смежные вопросы