簡體   English   中英

從Firebase Messenger應用程序下載用戶

[英]Download user from Firebase, Messenger app

我正在嘗試使用Firebase編寫Messenger應用。

在數據庫中,我有一些條目,它們是User.class對象。 我正在嘗試編寫可以從數據庫下載User對象的函數。 我雖然最好為此任務建立單獨的類(UserManager),因為我不喜歡使代碼混亂。 但是有一個問題,因為在onCreate方法中,我需要使用User對象從數據庫下載一些其他信息以創建對話列表,因此應該在此之前從服務器下載用戶。 另外,如果用戶不在數據庫中,它應該使用FirebaseAuth創建用戶並將其推送到數據庫(我已經完成了工作)。

我應該建立擴展AsynchTask的類,然后放置下載用戶,然后用用戶之后下載的數據更新UI嗎? 我如何知道用戶是否已經下載。 也許我應該建立一些監聽器,但是我不知道該怎么做。

附加問題:

如果我將此引用與值偵聽器一起使用,是否從對象內部獲取用戶對象或某個值?

DatabaseReference userReference = FirebaseDatabase.getInstance().getReference().child("users/" + mUserID);

這是我的數據庫:

在此處輸入圖片說明

每個條目密鑰都是FirebaseAuth中的userID,以便於實現。

我已經為此努力了幾天,並嘗試了不同的方法。 我會盡力的。 我認為,某些代碼或方案會很有幫助。

也許我的代碼的這一部分將幫助您找出:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users")
.child(mUserID);

ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        User user = dataSnapshot.getValue(User.class);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e(TAG, "DatabaseError: " + databaseError.getMessage());
    }
});

我如何知道用戶是否已經下載?

您可以為每個用戶添加一個值為false的標志,並在下載用戶對象后將其值設置為true但這不是Firebase的工作方式。 如果Firebase is a realtime database並且您可能永遠都無法完成獲取數據,則無法確定何時從數據庫中下載用戶。 這就是為什么將其命名為實時數據庫的原因,因為在任何菜單項中都可以更改該User對象下的數據,可以添加或刪除屬性。

您只能在寫入更新數據時使用CompletionListener ,並且在數據庫服務器確認該操作后,您會收到通知,但在讀取數據時不能使用此接口。

如果我將此引用與值偵聽器一起使用,是否從對象內部獲取用戶對象或某個值?

如果您正在偵聽的值是一個User對象,那么您將獲得一個User對象。 如果該值是另一種對象,也可以是String (也是對象),那么您將獲得該類型的對象,也可以是String對象。 請記住,只有Firebase數據庫中的鍵始終是字符串。

暫無
暫無

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

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