2016-07-11 15 views
1

ich RxAndroid bin mit und Retrofit für httprequest, ist mein Code wie folgt:RxAndroid: Retrofit funktioniert nicht zum zweiten Mal?

  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); 

Mein Szenario wie folgt aus: jedes Mal, wenn ich auf die Schaltfläche klicken „apiService.checkAccount()“ Methode ausgelöst. Das erste Mal: ​​Klicken Sie auf die Schaltfläche, httpRequest gesendet wird und ich kann Antwort erhalten

Klicken Sie jedoch das zweite Mal, keine httpRequest wurde gesendet und die Protokolle zeigt "I/Choreographer: 115 Frames übersprungen! Die Anwendung kann tun zu viel Arbeit auf dem Haupt-Thread. "

Allerdings, wenn ich Code

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) { 

        } 
       }); 
      } 
     }); 

Das Retrofit ändern funktioniert sehr gut, kann es Httprequest so oft wie Ihr wünschen schicken?

Sieht aus wie der "Subscriber" kann nicht eine Instanz sein?

Warum, Irgendeine Idee?

Dank

Antwort

-1

Sobald eine beobachtbare ein Terminal Ereignis emittiert (ein vollständiges oder Fehlerereignis) es wird sich keine weiteren Ereignisse emittieren (siehe here). Jeder Anruf an apiService.checkAccount(mUser.getEmail()) erstellt ein neues Observable, das Sie mit einem Abonnenten abonnieren können. Dies erstellt ein Abonnement.

Wahrscheinlich möchten Sie Ihre Subskriptionsobjekte und unsubscribe von ihnen speichern, wenn Sie fertig sind.

+0

In diesem ersten Teil Code: "apiService.checkAccount (mUser.getEmail()). ObserveOn (AndroidSchedulers.mainThread()). SubscribeOn (Schedulers.newThread()). Subscribe (mSubscirber);", tue ich "mSubscirber.unsubscirbe()" nach "onComplete" funktioniert der zweite Klick immer noch nicht – user1072605

Verwandte Themen