簡體   English   中英

RxJava Observer不兼容的類型

[英]RxJava Observer incompatible types

我正在嘗試使用Retrofit和RxJava在我正在處理的應用程序中的自定義視圖中進行API調用,但在嘗試從我的Retrofit API調用中訂閱Observable時遇到了不兼容的類型錯誤。

我的改造界面:

public interface ApiQueryInterface{
// Request method and URL specified in the annotation
// Callback for the parsed response is the last parameter

@GET("users/")
Observable<Users> getUsers (
        @Query("key") String key,
        @Query("address") String address
);

@GET("posts/")
Observable<Posts> getPosts (
        @Query("key") String key,
        @Query("address") String address
);

}

以及位於自定義視圖的onFinishInflate()內的Retrofit調用:

        // Create RxJava adapter for synchronous call
    RxJava2CallAdapterFactory rxAdapter = RxJava2CallAdapterFactory.create();

    // Create Retrofit2 instance for API call
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(rxAdapter)
            .build();

    // Make API call using retrofit
    final ApiQueryInterface apiQueryInterface = retrofit.create(ApiQueryInterface.class);

    // API return type defined by interface
    Observable<Users> query = apiQueryInterface
            .getUsers(KEY, ADDRESS)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Users>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(Users users) {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
}

當我構建項目時,我在以Observable <Users> query = ...開頭的行上的自定義視圖中遇到了一個不兼容的類型錯誤:

錯誤:(60,27)錯誤:不兼容的類型:void無法轉換為Observable <Users>

“Users”是一個通用模型類,它匹配從API返回的JSON對象

RxJava 1返回一個Subscription對象而不是Observable RxJava 2訂閱返回void。 這就是為什么你得到Error:(60, 27) error: incompatible types 您將在回調onSubscribe中獲得Disposable。 如果需要對它的引用,可以在調用回調時將其分配給類級別成員

將返回的對象更改為Subscription

private Subscription subscription;

....

subscription = ApiClient.getInstance()
        .getUsers(KEY, ADDRESS)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<List<Users>>() {
                                   @Override public void onCompleted() {

                                   }

                                   @Override public void onError(Throwable e) {

                                   }

                                   @Override public void onNext(List<Users> users) {

                                   }
                               });

apiclient

public class ApiClient {

private static ApiClient instance;
private ApiQueryInterface apiqueryinterface;

private ApiClient() {
    final Gson gson =
        new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
    final Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
                                                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                                                    .addConverterFactory(GsonConverterFactory.create(gson))
                                                    .build();
    apiqueryinterface = retrofit.create(ApiQueryInterface.class);
}

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

public Observable<List<Users>> getUsers(@NonNull String key, @NonNull String address) {
    return apiqueryinterface.getUsers(key, address);
}

}

接口

public interface ApiQueryInterface{
// Request method and URL specified in the annotation
// Callback for the parsed response is the last parameter

@GET("users")
Observable<<List<Users>>  getUsers (
    @Query("key") String key,
    @Query("address") String address
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM