代码之家  ›  专栏  ›  技术社区  ›  DreamsInHD

Android RXJava订阅返回类型错误

  •  -1
  • DreamsInHD  · 技术社区  · 7 年前

    我刚开始使用RXJava和RXandroid,并一直在努力 this basic example . 我在订阅Observable的最后一部分时遇到了麻烦,那就是这段代码。

    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 回复  |  直到 7 年前
        1
  •  1
  •   Mikhail Sidorov    7 年前

    当涉及到链接上的示例时,将使用rxjava-1。但在您的导入中,rxjava-2是导入的=)

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

    尝试使用subscribeWith()而不是subscribe(),或者将subscribe()调用为空函数

        2
  •  -1
  •   ardiien    7 年前

    检查 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