Android RxJava неверный тип возврата для подписки - PullRequest
0 голосов
/ 09 февраля 2019

Я только начал с RxJava и RxAndroid и работал с в этом базовом примере .У меня возникли проблемы с последней частью, где я подписываюсь на заметку, которой является этот код.

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 голосов
/ 09 февраля 2019

Когда дело доходит до примера, по вашей ссылке используется RxJava-1.Но в вашем импорте импортируется RxJava-2 =)

Во 2-м RX метод подписки был изменен, теперь он возвращает void.

Попробуйте использовать подписку () вместо подписки () или вызовите подписку () как пустую функцию

0 голосов
/ 09 февраля 2019

Проверка это один.Это рабочий проект, но немного сложный.Вам не нужно использовать второй запрос, просто используйте первый.

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

...