我必須使用使用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中,所以我無法訪問它以創建可觀察對象。 –