Я пытаюсь реализовать Observer/Subscriber с RxJava в первый раз. я получаю ошибку компиляции:Фрагмент подписаться на Observer
cannot resolve method subscribe(android.support.v4.app.Fragment)
на линии, указанной ниже. Поэтому я не подписываюсь правильно. Как это сделать?
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Fragment myFragment = mTabsPageAdapter.getItem(2);
Observable<String> loadAndStoreDataObservable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
try {
<get data from RESTful service>
<write data to SQLite db on device>
subscriber.onNext("Done");
subscriber.onCompleted();
}
catch (Exception e) {
subscriber.onError(e);
}
}
}
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(myFragment); // cannot resolve method subscribe(android.support.v4.app.Fragment)
}
}
import android.support.v4.app.Fragment;
public class MyFragment extends Fragment implements Observer<String> {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
}
Редактировать: Я изменил линию, предложенную Владимиром Мироновым. Это кажется необходимым, но недостаточно. Реализация его я тогда получаю ошибку компиляции на линии после этого:
Несовместимые типы: Обязательный rx.Observable Найдено rx.Subscription
Это предполагает приведение к (Observable<String>)
так:
Observable<String> loadAndStoreDataObservable = (Observable<String>) Observable.create(...)
который действительно делает компиляцию без ошибок, но дает ошибку времени выполнения:
java.lang.ClassCastException: rx.observers.SafeSubscriber нельзя отличить до rx.Observable
Edit 2: Я думаю, что это должно быть: Subscription loadAndStoreDataObservable = ...
MyFragment myFragment = (MyFragment) mTabsPageAdapter.getItem (2); –
Спасибо за ответ. См. Редактирование исходного вопроса. –
Тип возврата из 'subscribe' является подпиской, а не наблюдаемой. – njzk2