2017-04-10 41 views
1

我希望在操作後取消訂閱Rx選拔。 這就是我在RxJava中取消訂閱Observable的方式。如何取消訂閱RxJava中的單一Observable

public class BooksRepositoryImpl implements IBooksRepository { 


    private ReplaySubject<Book> bookSubject; 
    private Subscription bookSubscription; 

    BooksApi BooksApi; 
    ISchedulerProvider scheduler; 

    @Inject 
    public BooksRepositoryImpl(BooksApi BooksApi, ISchedulerProvider scheduler) { 
     this.BooksApi = BooksApi; 
     this.scheduler = scheduler; 
    } 

    @Override 
    public Observable<Book> getBooks(String author) { 

     if (bookSubscription == null || bookSubscription.isUnsubscribed()) { 
      bookSubscription = ReplaySubject.create(); 

      bookSubscription = BooksApi.getBooks(author) 
        .subscribeOn(scheduler.backgroundThread()); 
     } 

     return bookSubscription.asObservable(); 


    } 


    @Override 
    public void unbind() { 

     if (bookSubscription != null && !bookSubscription.isUnsubscribed()) 
      bookSubscription.unsubscribe(); 

    } 

} 

但我不知道如何取消訂閱Single Observable。 如果有人能夠分享一些想法,這將是非常好的。

public class BooksRepositoryImpl implements IBooksRepository { 

BooksApi BooksApi; 
ISchedulerProvider scheduler; 

@Inject 
public BooksRepositoryImpl(BooksApi BooksApi, ISchedulerProvider scheduler) { 
    this.BooksApi = BooksApi; 
    this.scheduler = scheduler; 
} 

@Override 
public Single<Book> getBooks(String author) { 

    return BooksApi.getBooks(author) 
      .subscribeOn(scheduler.backgroundThread()); 

} 


@Override 
public void unbind() { 
    //?? HOW Can I unsubscribe here 
} 

}

+0

另一個問題的重複可能已經在[這裏](https://stackoverflow.com/a/47862794/3282461) – Android

回答

1

根據文檔Single,你應該自己什麼都不做,認購結束:

一個單將調用這些方法中只有一個,而且只會調用它 一次。一旦調用任一方法,Single將終止並且其訂購將結束。

希望這會有所幫助。 對不起,我的英語。