Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 用可观察的Rxjava包装遗留异步任务?_Android_Android Asynctask_Rx Java - Fatal编程技术网

Android 用可观察的Rxjava包装遗留异步任务?

Android 用可观察的Rxjava包装遗留异步任务?,android,android-asynctask,rx-java,Android,Android Asynctask,Rx Java,我必须使用一个遗留库,它使用AsyncTask作为后台作业。如何用当前项目中使用的可观察对象包装AsyncTask AsyncTask已封装,因此我无法访问AsyncTask内的同步调用 提前感谢 假设您有一个对象asynchronousCall,它使用call()方法执行一些异步工作,该方法将callback作为参数,您可以这样包装它: Observable.create(new Observable.OnSubscribe<Object>() { @Ove

我必须使用一个遗留库,它使用AsyncTask作为后台作业。如何用当前项目中使用的可观察对象包装AsyncTask

AsyncTask已封装,因此我无法访问AsyncTask内的同步调用

提前感谢

假设您有一个对象asynchronousCall,它使用call()方法执行一些异步工作,该方法将callback作为参数,您可以这样包装它:

    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);
                }
            });
        }
    });
Observable.create(新建Observable.OnSubscribe()){
@凌驾

public void call(final Subscriber当您不能或不想在可观察的
中包装执行时,另一种方法是使用:

publicstaticvoidmain(字符串[]args){
Subject Subject=PublishSubject.create();
侦听器侦听器=新侦听器(){
@凌驾
公用void onCallback(对象){
subject.onNext(object);
subject.onCompleted();
}
};
subject.subscribe(对象->你的反应(对象));
someMethodWithCallback(侦听器);
}
公共接口侦听器{
void onCallback(对象);
}

Subject
作为
观察者
允许您向其发送项目,而作为
观察者
允许您订阅并接收这些事件。

很抱歉,请问您是如何实现的?您如何调用该库?如果该库具有任何同步调用功能,那么您可以轻松转换它到可观察对象。感谢您的提问。库提供了一个AsyncTask,并需要一个侦听器来处理回调。同步调用位于AsyncTask内部,因此我无法从中访问以创建可观察对象。感谢您的回答,我刚刚更新了我的问题,并提供了更多详细信息:AsyncTask已封装,因此我无法访问AsyncTask内部的同步调用。谢谢在本例中asynchronousCall.call()也是异步的,这就是它将回调作为参数的原因,您能否提供一个简短的示例,说明您现在如何使用该api?非常感谢。您让我高兴了。很抱歉没有仔细阅读您的答案。