首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Retrofit + Rxjava flowable过早完成

Android Retrofit + Rxjava flowable过早完成
EN

Stack Overflow用户
提问于 2020-04-09 23:55:35
回答 1查看 486关注 0票数 0

我正在尝试从一个Spring RestController向一个使用Retrofit和Rxjava的安卓应用程序发送一个io.reactivex.Flowable。如果我使用浏览器检查Rest端点返回的内容,我会如期得到一系列值,但在安卓中我只得到一个值,然后它会调用onComplete方法。我遗漏了什么?

弹簧控制器:

代码语言:javascript
复制
@GetMapping("/api/reactive")
    public Flowable<String> reactive() {
        return Flowable.interval(1, TimeUnit.SECONDS).map(sequence -> "\"Flowable-" + LocalTime.now().toString() + "\"");
    }

改装存储库:

代码语言:javascript
复制
@GET("reactive")
    Flowable<String> testReactive();

主要服务:

代码语言:javascript
复制
public useReactive() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Values.BASE_URL)
                .addConverterFactory(JacksonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        userRepository = retrofit.create(UserRepository.class);

        Flowable<String> reactive = userRepository.testReactive();
        Disposable disp = reactive.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new ResourceSubscriber<String>() {
                    @Override
                    public void onNext(String s) {
                        logger.log(Level.INFO, s);
                        Toast.makeText(authActivity, s, Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onError(Throwable t) {
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        logger.log(Level.INFO, "Completed");
                        Toast.makeText(authActivity, "Completed", Toast.LENGTH_SHORT).show();
                    }
                });
    }

在调用useReactive()方法时,我只得到一个值"Flowable-...“然后是“完成”。

EN

回答 1

Stack Overflow用户

发布于 2020-04-10 18:06:43

即使Retrofit服务具有返回类型Flowable<String>,调用testReactive()也只会在安卓设备上进行一次HTTP调用。

Flowable类型仅仅是为了兼容,实际上它最终将是一个发出单个值然后终止的Flowable

这就是Retrofit的工作原理。

如果您希望不断接收从服务器发出的新值(可能是GRPC或轮询服务器),则需要找到另一个解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61125196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档