我尝试使用RxJava通过RxAndroid及其他图书馆RxLifecycle,在从Activity
获取一些数据后更新SyncAdapter
。我知道当Service
呼叫时,如何通过Activity
执行网络呼叫。例如:
Observable<String> fetchFromGoogle = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
try {
String data = fetchData("http://www.google.com");
subscriber.onNext(data); // Emit the contents of the URL
subscriber.onCompleted(); // Nothing more to emit
}catch(Exception e){
subscriber.onError(e); // In case there are network errors
}
}
});
fetchFromGoogle
.subscribeOn(Schedulers.newThread()) // Create a new Thread
.observeOn(AndroidSchedulers.mainThread()) // Use the UI thread
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
view.setText(view.getText() + "\n" + s); // Change a View
}
});
问题在于,当使用SyncAdapter
时,SyncManager
负责启动Service
来获取数据。因此,我不知道如何在一个尚未启动且在UI上观察的线程上创建一个Observable
。
我正在考虑创建Singleton
Subject
我Activity
可以依据的SyncAdapter
,并在Observable
创建Singleton
时发出的事件是{它完成了(在怀疑Subject
TypeError: 'str' object is not callable
之后)。
什么是更好/正确的解决方案?