2016-07-11 4 views
1

Я использую RxAndroid и Дооснащение для HTTPRequest, мой код, как показано ниже:RxAndroid: Модернизация не работает во второй раз?

  OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logging) 
        .authenticator(new DigestAuthenticator()) 
        .build(); 
      // retrofit with custom client 
      Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl(NetUtil.getServerBaseUrl()) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
        .client(client) 
        .build(); 
      ApiService apiService = retrofit.create(ApiEndpoints.class); 


    CustomerSubscriber mSubscriber = new CustomerSubscriber(); 

apiService.checkAccount(mUser.getEmail()).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(mSubscirber); 


    //Retrofit 
    @Headers({ 
       "Accept: application/json;charset=utf-8", 
       "Content-Type: application/json;charset=utf-8" 
     }) 
     @HEAD("/account") 
     Observable<Result<Void>> rxHeadAccount(
       @Query("email") String encryptedEmail); 

Мой сценарий как это: каждый раз, когда я нажимаю на кнопку «apiService.checkAccount()» метод будет вызван. В первый раз: нажмите кнопку, отправляется httpRequest, и я могу получить ответ

Однако, нажмите второй раз, не было отправлено httpRequest, а журналы показывают «I/Хореограф: пропущено 115 кадров! Приложение может выполнять слишком много работы по его основному потоку. "

Однако если изменить код

apiService.checkAccount(mUser.getEmail()).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(new Subscriber<Result<Void>>() { 
        @Override 
        public void onCompleted() { 

        } 

        @Override 
        public void onError(Throwable e) { 

        } 

        @Override 
        public void onNext(Result<Void> voidResult) { 

        } 
       }); 
      } 
     }); 

модифицированное очень хорошо работает, он может отправить HttpRequest столько раз, как хочешь?

Похоже, что «Подписчик» не может быть одним экземпляром?

Почему, Есть идеи об этом?

Благодаря

ответ

-1

После наблюдаемого излучает терминальное событие (полные или ошибка событий) он не собирается генерировать события (см here). Каждый вызов apiService.checkAccount(mUser.getEmail()) создает новый наблюдаемый, с которым вы можете подписаться с подписчиком. Это создает подписку.

Возможно, вы захотите сохранить свои объекты подписки и unsubscribe от них, когда закончите.

+0

Однако в этом первом фрагменте кода: «apiService.checkAccount (mUser.getEmail()) .Обратите внимание (AndroidSchedulers.mainThread()). SubscribeOn (Schedulers.newThread()). Subscribe (mSubscirber); «mSubscirber.unsubscirbe()» после «onComplete», второй щелчок по-прежнему не работает – user1072605

Смежные вопросы