Android RxJava订阅的返回类型错误

时间:2019-02-09 12:41:33

标签: android rx-java rx-java2 rx-android

我刚开始使用RxJava和RxAndroid,并正在通过this basic example工作。我在最后一部分中遇到了麻烦,我订阅了这段可观察的代码。

subscription = GithubClient.getInstance()
            .getStarredRepositories(userName)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<GithubRepo>>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(List<GithubRepo> githubRepos) {
                    githubRepoAdapter.setGithubRepos(githubRepos);
                }
            });

我不知道本教程是否过时或做错了什么。我以为可能是因为我的导入错误,但是我已经尝试了全部,但没有任何效果。这些是此代码的导入。

import io.reactivex.android.schedulers.AndroidSchedulers;
import rx.Observer;
import rx.Subscription;
import rx.schedulers.Schedulers;

我也尝试过这些:

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import rx.Subscription;

但是观察者必须实现不同的方法:

    subscription = GithubClient.getInstance()
            .getStarredRepositories(userName)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<GithubRepo>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(List<GithubRepo> githubRepos) {
                    githubRepoAdapter.setGithubRepos(githubRepos);
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });

使用此代码,我得到错误Required: rx.Subscription, Found: void

相关依赖项:

implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.5.0'

2 个答案:

答案 0 :(得分:1)

在链接示例中,使用RxJava-1。但是在您的导入中RxJava-2是导入的=)

在第二个RX订阅方法中已更改,现在它返回void。

尝试使用subscribeWith()而不是subscribe(),或将subscribe()用作无效函数

答案 1 :(得分:-1)

选中this。这是一个正在运行的项目,但是有点复杂。您无需使用第二个请求,只需使用第一个请求即可。

val allRepositories =
    gitHubApi.getAllPublicRepositories().map {
    // taken sublist because GitHub has a restriction up to 60 calls rate limit per hour.
    it.subList(0, 5)
    }.doOnError {
        Log.e(TAG, "Exception: ", it)
    }.subscribeOn(Schedulers.io())

并根据需要进行其他修改。

  

GitHub每小时的通话速率上限为60个。

也许您应该检查一下https://api.github.com/rate_limit