2017-04-10 95 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将终止并且其订购将结束。

希望这会有所帮助。 对不起,我的英语。