簡體   English   中英

使用LiveData從Firebase獲取數據時,永遠不會調用onChanged

[英]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 如何解決呢?

倉庫應該具有不可改變和可變的實時數據對象。倉庫應該暴露不可改變的實時數據對象。 不可更改的對象將使用可更改的對象進行更新。 示例應用程序示例

https://github.com/ashok07m/Pokemon-Sample-App/blob/master/app/src/main/java/com/learning/pokemon/data/repository/MainRepositoryImpl.kt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM