如何创建自定义订阅服务器?

尼克·尤努切克

我要progressDialogobservable下载文件时显示,完成后想将文件发送给订户。

我尝试通过以下方式扩展自定义订户Subscriber

public abstract class MySubscriber<T> extends Subscriber {
    abstract void onMessage(String message);
    abstract void onDownloaded(File file);
}

并尝试订阅它:

MySubscriber mySubscriber = new MySubscriber() {
            @Override
            public void onMessage(String message) {
                progessDialog.setMessage(message);
            }

            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object o) {

            }
        };

observable.subscribe(mySubscriber);

可观察到的是:

observable  = Observable.create(new Observable.OnSubscribe<Void>() {
            @Override
            public void call(Subscriber<Void> subscriber) {
                 //file downloading code...
                if (subscriber instanceof MySubscriber){
                ((MySubscriber) subscriber).onMessage("100%");
                ((MySubscriber) subscriber).onDownloaded(file);
               }else{
                   Log.e(TAG,"subscriber is not instance of MySubscriber")
                }
             }

答案是“订户不是MySubscriber的实例”

AndroidEx

之所以subscriber没有这种类型,MySubscriber是因为您传递的实例最终被subscribe()in包装SafeSubscriber

private static <T> Subscription subscribe(Subscriber<? super T> subscriber, Observable<T> observable) {
    ...
        if(!(subscriber instanceof SafeSubscriber)) {
            subscriber = new SafeSubscriber((Subscriber)subscriber);
        }
    ...
    }
}

如果您想继续使用自己的方法,可以将其强制subscriber转换SafeSubscriber并调用SafeSubscriber#getActual()以获取您的实例MySubscriber

在您的情况下:

Observable.create(new Observable.OnSubscribe<Void>() {
    @Override
    public void call(Subscriber<? super Void> subscriber) {
        Subscriber yourSubscriber = ((SafeSubscriber) subscriber).getActual();
        ((MySubscriber) yourSubscriber).onMessage("100%");
        ((MySubscriber) yourSubscriber).onDownloaded(file);
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何实现自定义Apollo服务器KeyValueCache?

来自分类Dev

ROS带有sensor_msgs的自定义消息/订阅服务器的图像问题

来自分类Dev

创建自定义验证属性C#服务器端

来自分类Dev

Spring Security OAuth 2.0-创建自定义资源服务器

来自分类Dev

Graphhopper服务器-创建和使用自定义车辆类型

来自分类Dev

PlayFab-为纸牌游戏创建自定义验证服务器

来自分类Dev

使用 node js 创建简单的服务器(自定义协议)

来自分类Dev

如何使用NTP服务器使用自定义DST设置创建自定义时区?

来自分类Dev

如何在 Linux 的 Azure 应用服务中使用自定义 DNS 服务器?

来自分类Dev

如何使用自定义验证器服务器验证列表中的每个条目

来自分类Dev

如何创建自定义整理器?

来自分类Dev

XMPP服务器和自定义API

来自分类Dev

使用自定义类从服务器获取响应

来自分类Dev

用户的会话状态服务器自定义超时

来自分类Dev

运行自定义TextSecure(信号)服务器

来自分类Dev

Composer自定义GitLab服务器依赖项

来自分类Dev

域和自定义DNS服务器

来自分类Dev

asp.net自定义服务器控件

来自分类Dev

具有自定义URL的WAMP服务器

来自分类Dev

自定义Django的服务器配置

来自分类Dev

设置厨师服务器自定义URL

来自分类Dev

自定义Laravel Homestead服务器设置?

来自分类Dev

使用自定义 mongoDB 服务器而不是 mongolab

来自分类Dev

.NET Core 自定义服务器证书 CA

来自分类Dev

为自定义 api 设置 ruby 服务器

来自分类Dev

如何在Sitecore内容分发服务器上重建自定义Lucene索引?

来自分类Dev

如何在Ember CLI中使用自定义Express服务器?

来自分类Dev

如何将自定义Whois服务器添加到WHMCS

来自分类Dev

如何仅对选定域使用自定义DNS服务器?

Related 相关文章

热门标签

归档