2016-12-13 59 views
2

在RxJava 1我在做这样的事情RxJava2与改造2 API调用

private void doLogin() { 

     final ProjectApi service = RetrofitService.createRetrofitClient(); 
     staticsubscription = service.service.getLogin(new PostLoginPojo("","", new Mobsess("","","","",""))) 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(staticObserver); 

    } 
Observer<ApiLogin> getLoginObserver = new Observer<ApiLogin>() { 

     @Override 
     public void onCompleted() { 
      staticsubscription.unsubscribe(); 
     } 

     @Override 
     public void onError(Throwable e) { 
      // Called when the observable encounters an error 
      // Log.d(TAG, ">>>> onError gets called : " + e.getMessage()); 
     } 

     @Override 
     public void onNext(ApiLogin staticData) { 


     } 
    }; 

现在RxJava 2 我试图将其转换这样
编辑: -

private void doLogin(){ 

     final ProjectApi service = RetrofitService.createRetrofitClient(); 
     Disposable disposable = service.getLogin(new PostLoginPojo("","", new Mobsess("","","","",""))) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(getLoginObserver()); 

    } 

    public DisposableObserver<ApiLogin> getLoginObserver() { 
    return new DisposableObserver<ApiLogin>() { 
     @Override 
     public void onNext(ApiLogin value) { 

     } 

     @Override 
     public void onError(Throwable e) { 

     } 

     @Override 
     public void onComplete() { 

     } 
    }; 
} 

这是我的项目Api

public interface ProjectApi { 
    String login = "customer/validate"; 

    @POST(login) 
    Observable<ApiLogin> getLogin(@Body PostLoginPojo post); 
} 

而这是改造服务: -

public class RetrofitService { 
    private final static String API_URL = AppUrl.baseUrl ; 
    public RetrofitService(){ 
    } 
    public static ProjectApi createRetrofitClient() { 
     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
     OkHttpClient client = new OkHttpClient.Builder(). 
       addInterceptor(interceptor).build(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(API_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
       .client(client) 
       .build(); 


     return retrofit.create(ProjectApi.class); 
    } 
} 

错误:incompatible types: void cannot be converted to Disposable

我收到错误 “不兼容的类型” 上.subscribe(getLoginObserver())

需要 “io.reacivex.disposbles.Disposable” 发现 “空白”

我在做什么错在这里? 感谢

回答

3

subscribe回报void现在,

public Observer<ApiLogin> getLoginObserver() 

应该返回DisposableObserver<ApiLogin>,然后你应该能够使用

subscribeWith(getLoginObserver()); 
+0

这就是问题所在,即使我回国DisposableObserver ,它是说它的“虚”。 – imagngames

+1

发布使用'DisposableObserver'的代码以及您正在获取的确切错误。发布getLogin定义的定义。并使用'subscribeWith'不'订阅' – Blackbelt

+0

更新了我的问题。 – imagngames