0
我有一個記錄登錄用戶的單身人士。如果instance
爲空,我有一個getInstance()
方法從數據庫中提取用戶。我的問題是如果保持打開訂閱是可以的,那麼對數據庫的任何更新都會自動更新instance
變量。保持訂閱在單一狀態下打開
這裏是我的類看起來像:
public class CurrentUser {
private static User instance;
private CurrentUser(){
//Singleton
}
public static void init(){
getCurrentuserFromDatabase();
}
public static User getInstance(){
if(instance == null){
getCurrentuserFromDatabase();
}
return instance;
}
private static void getCurrentuserFromDatabase(){
DatabaseModule.getStorIOSQLite()
.get()
.object(User.class)
.withQuery(
//Select a user from the User table whose session token is not null and is not empty
Query.builder()
.table(UsersTable.TABLE)
.where(UsersTable.COLUMN_SESSION_TOKEN + "IS NOT NULL AND " +
UsersTable.COLUMN_SESSION_TOKEN + " != \"\"")
.build())
.prepare()
.createObservable()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.newThread())
.subscribe(new Observer<User>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
//user wasn't logged in
}
@Override
public void onNext(User user) {
instance = user;
}
});
}
}
如果我肯定在某個地方打電話unsubscribe
?如果是這樣的話? onComplete()
?
感謝您的回答。如果不在onComplete()中,那麼在onNext()中如何。我想我的問題是哪裏是最適合退訂的地方?另外,在你後半段的回答中,我不完全明白你的意思。爲什麼我需要讓這個類不可變? – Sree
那麼,如果你在'onNext()'退訂,那麼你將不會收到任何更新。 –
哦,等等,你正在異步填充'User instance'並且可能返回'null'作爲'getInstance()'的結果,好吧,現在我不確定你希望你的代碼如何工作... –