2015-12-22 5 views
3

Я хочу периодически запускать метод таким образом, чтобы он возвращал ArrayList пользовательского объекта. Вот мой фрагмент кода,Возврат ArrayList объекта в rxAndroid

subscribe = Observable.interval(5, TimeUnit.SECONDS) 
      .map(new Func1<Long, ArrayList<Item>>() { 

       @Override 
       public ArrayList<Item> call(Long aLong) { 
        return new ArrayList<Item>(aLong.intValue()); 
       } 
      }); 

Однако это дает ошибку

map(rx.functions.Func1<? super T, ? extends R>) в Наблюдаемые не может быть применен к (anonymous rx.functions.Func1<java.lang.Long, java.util.ArrayList<com.example.Item>>)

Это прекрасно работает, когда возвращаемое значение является ArrayList<String>. Я не понимаю, в чем проблема. Не разрешены ли пользовательские объекты?

+1

Ваш код выглядит хорошо. Что такое тип подписной переменной? – jimmy0251

+0

@ jimmy0251 'rx.Subscription' –

+1

@ jimmy0251 У меня возникла проблема, если вы не выполняете полный' .subsribe() ', у вас нет объекта' Subscription'. –

ответ

1

Вы не получаете подписку на карту, вы получаете ее после подписки. Вот пример кода для его демонстрации.

Observable<ArrayList<Item>> observable = Observable.interval(5, TimeUnit.SECONDS) 
      .map(new Func1<Long, ArrayList<Item>>() { 

       @Override 
       public ArrayList<Item> call(Long aLong) { 
        return new ArrayList<Item>(aLong.intValue()); 
       } 
      }); 
    Subscription subscription = observable.subscribe(new Action1<ArrayList<Item>>() { 
     @Override 
     public void call(ArrayList<Item> items) { 
      //Do something with list items here 
     } 
    }); 
Смежные вопросы