我必须使用使用AsyncTask进行后台工作的遗留库。如何通过我当前项目中使用的Observable对象来包装AsyncTask。由Observable Rxjava包装遗留的AsyncTask?
AsyncTask被封装,所以我无法访问AsyncTask中的同步调用。
感谢先进!
我必须使用使用AsyncTask进行后台工作的遗留库。如何通过我当前项目中使用的Observable对象来包装AsyncTask。由Observable Rxjava包装遗留的AsyncTask?
AsyncTask被封装,所以我无法访问AsyncTask中的同步调用。
感谢先进!
说你有一个对象asynchronousCall执行一些异步工作,()调用方法,它需要回调作为参数,可以把它包装这样的:
Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(final Subscriber<? super Object> subscriber) {
asynchronousCall.call(new CallBack() {
@Override
public void success(Object o) {
subscriber.onNext(o);
subscriber.onCompleted();
}
@Override
public void error(Throwable t) {
subscriber.onError(t);
}
});
}
});
感谢您的回答,我只是更新了我的问题,并提供了更多详细信息:AsyncTask已封装,因此无法访问AsyncTask中的同步调用。 谢谢 –
在这个例子中,asynchronousCall.call()也是异步的,这就是为什么它需要回调作为参数,你能提供一个简短的例子,你如何使用该API? – krp
非常感谢。你让我很快乐。对不起,没有仔细阅读你的答案。 –
另一种方法这样的情况:你不能或不想在Observable
包执行是使用Subjects
:
public static void main(String[] args) {
Subject<Object, Object> subject = PublishSubject.create();
Listener listener = new Listener() {
@Override
public void onCallback(Object object) {
subject.onNext(object);
subject.onCompleted();
}
};
subject.subscribe(object -> yourReaction(object));
someMethodWithCallback(listener);
}
public interface Listener {
void onCallback(Object object);
}
Subject
是一个您可以使用Observer
向其发送项目,而使用Observable
则允许您订阅并接收这些事件。
不好意思问,你是如何实现这个的? – Sree
你如何称此图书馆?如果该库具有任何同步调用功能,那么您可以轻松将其转换为Observable对象。 –
感谢您的问题。该库提供了一个AsyncTask并需要一个监听器来处理回调。 同步调用在AsyncTask中,所以我无法访问它以创建可观察对象。 –