![](/img/trans.png)
[英]LiveData onChanged called multiple times with the same data when using FirebaseAuth
[英]onChanged is never called when getting data from Firebase using LiveData
我有以下活動課程:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
splashViewModel.nameLiveData.observe(this, new Observer<String>() {
@Override
public void onChanged(String name) {
Log.d(TAG, name); //Isn't printing anything
}
});
}
}
這是我的視圖模型類:
public class SplashViewModel extends ViewModel {
private SplashRepository repository;
MutableLiveData<String> nameLiveData;
@Inject
SplashViewModel(SplashRepository repository) {
this.repository = repository;
nameLiveData = repository.addNameToLiveData();
}
}
這是我的存儲庫類:
class SplashRepository {
MutableLiveData<String> addNameToLiveData() {
MutableLiveData<String> nameMutableLiveData = new MutableLiveData<>();
ref.document(uid).get().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if(document.exists()) {
String name = document.getString("name");
Log.d(TAG, name); //Is printed out correctly
nameMutableLiveData.postValue(name);
}
}
});
return nameMutableLiveData;
}
}
我正在使用postValue()
將數據添加到LiveData
。 在回調中,它可以正確打印名稱,但是在觀察nameLiveData
對象時,甚至不會觸發onChanged
。 如何解決呢?
倉庫應該具有不可改變和可變的實時數據對象。倉庫應該暴露不可改變的實時數據對象。 不可更改的對象將使用可更改的對象進行更新。 示例應用程序示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.