2017-04-17 331 views
1

在我的应用程序中,我试图使用Retrofit 2RxJava2从我的网络服务器获取数据。但是,当我订阅我的API接口方法,我得到错误无法解析方法订阅翻新Rxjava android

Cannot Resolve method 'subscribe(anonymous org.reactivestreams.Subscriber<*Model Name*> 

API客户端:

public class ApiClient { 
    public static final String BASE_URL = "*********"; 
    private static Retrofit retrofit = null; 
    public static Retrofit getClient() { 
     final OkHttpClient okHttpClient = new OkHttpClient.Builder() 
       .readTimeout(60, TimeUnit.SECONDS) 
       .connectTimeout(60, TimeUnit.SECONDS) 
       .build(); 
     if (retrofit==null) { 
      Gson gson = new GsonBuilder() 
        .setLenient() 
        .create(); 
      retrofit = new Retrofit.Builder() 
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
        .baseUrl(BASE_URL) 
        .client(okHttpClient) 
        .addConverterFactory(GsonConverterFactory.create(gson)) 
        .build(); 
     } 
     return retrofit; 
    } 


} 

ApiInterface

public interface ApiInterface { 
    @FormUrlEncoded 
    @POST("user/get_user") 
    Observable<UserResponse> getUsers(@Field("email") String email, @Field("password") String password); 

} 

UserResponse型号:

public class UserResponse { 

    private List<User> result; 
    private String status_message; 
    private int status_code; 

    public int getStatus_code() { 
     return status_code; 
    } 

    public void setStatus_code(int status_code) { 
     this.status_code = status_code; 
    } 

    public List<User> getResult() { 
     return result; 
    } 

    public void setResult(List<User> result) { 
     this.result = result; 
    } 

    public String getStatus_message() { 
     return status_message; 
    } 

    public void setStatus_message(String status_message) { 
     this.status_message = status_message; 
    } 
} 

方法内的活动:

/*Test Login */ 
private void loginUser(){ 
     ApiInterface apiInterface = ApiClient.getClient().create(ApiInterface.class); 
     getUsers = apiInterface.getUsers("[email protected]","12345678"); 
     getUsers.subscribeOn(Schedulers.io()). 
       observeOn(AndroidSchedulers.mainThread()). 
       subscribe(new Subscriber<UserResponse>(){ 

        @Override 
        public void onSubscribe(Subscription s) { 

        } 

        @Override 
        public void onNext(UserResponse userResponse) { 

        } 

        @Override 
        public void onError(Throwable t) { 

        } 

        @Override 
        public void onComplete() { 

        } 
       }); 
    } 
+0

请妥善清理并重建项目。 –

+0

清理和重建后没有任何影响 –

+2

我认为您导入了错误的Subscriber类 –

回答

9

Subscriber用于订阅一个Flowable

Observable,相反,你可以使用Observer

.subscribe(new Observer<Void>() { 
    @Override 
    public void onSubscribe(Disposable d) {} 

    @Override 
    public void onNext(Void orderValues) {} 

    @Override 
    public void onError(Throwable e) {} 

    @Override 
    public void onComplete() {} 
}); 
+0

感谢您提供简单明了的回复。 –

1

你不能用可观测的V2使用用户。 使用新的观察者<>改为

+0

这不提供问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将可以[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/18821407) –