RXJava Подписка Необратимые типы;не может привести 'void' к 'org.reactivestreams.Subscription? - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь использовать Retrofit и RxJava для выполнения вызова API в пользовательском представлении в приложении, над которым я работаю, но я сталкиваюсь с ошибкой несовместимого типа при попытке подписаться на Observable из моего вызова Retrofit API.

ApiService

public interface ApiService {
@GET("airline-tickets.php")
Observable<List<Ticket>> getStarredRepositories();
}

ApiClient

public class ApiClient {
private static final String GITHUB_BASE_URL = "https://api.androidhive.info/json/";
private ApiService apiService;
private static ApiClient instance;

public ApiClient() {
    final Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(GITHUB_BASE_URL)
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    apiService = retrofit.create(ApiService.class);
}

public static ApiClient getInstance() {
    if (instance == null) {
        instance = new ApiClient();
    }
    return instance;
}

public Observable<List<Ticket>> getStarredRepos() {
    return apiService.getStarredRepositories();
}
}

MainActivity

public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getName();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Subscription subscription= (Subscription) ApiClient.getInstance()
            .getStarredRepos()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Ticket>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(List<Ticket> tickets) {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
}
}

Эта часть кода показывает Необратимые типы;не может привести 'void' к 'org.reactivestreams.Subscription

Subscription subscription= (Subscription) ApiClient.getInstance()
            .getStarredRepos()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Ticket>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(List<Ticket> tickets) {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });

1 Ответ

0 голосов
/ 24 ноября 2018

Используйте subscribeWith, который возвращает Observer, который вы передали этому методу.Вы, вероятно, используете старый код RxJava 1.API RxJava 2 немного изменился.Observable теперь принимает Observer, и вы должны изменить Subscription на Observer

...