2017-04-05 80 views
3

我使用Firebase數據庫和Java在Android上創建了一個聊天應用程序。無論用戶何時首次註冊,都會將其用戶名存儲到節點「user」,UserID,「profile」,「username」下的數據庫中。用戶名使用用戶類存儲。這是存儲用戶名值的地方。然而,當我嘗試類似從Firebase數據庫檢索特定數據

mDatabase.child("users").child(UserID).child("profile").child("username").toString(); 

這給了我的路徑到用戶名,但不是用戶名本身。有人知道如何獲得用戶名的價值嗎?

編輯:它給了我一個錯誤,當我運行

DataSnapshot.child("users").child(mUserID).child("profile").child("username").getValue().toString(); 

這裏是我的火力地堡數據庫顯示的用戶名下方。

Firebase database profile

回答

2

你沒有得到正確的值。您需要爲您的孩子添加一個監聽器並獲取更新。你這樣做:

// Get a reference to your user 
final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference ref = database.getReference("server/path/to/profile"); 

// Attach a listener to read the data at your profile reference 
ref.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Profile profile = dataSnapshot.getValue(Profile.class); 
     System.out.println(profile.getUsername()); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     System.out.println("The read failed: " + databaseError.getCode()); 
    } 
}); 

你可以找到更多關於Firebase website的信息和例子。請注意,您不會提出從Firebase獲取數據的請求。您將偵聽器附加到子級,然後從偵聽器獲取數據。此示例假定您有一個Profile模型,並具有獲取用戶名的方法。這將返回您的對象,並使您能夠獲取所需的任何數據。

+0

此代碼位於ChildEventListener中。我應該使用ValueEventListener嗎? –

+0

您也可以使用ChildEventListener。這給你一些其他的選項,如刪除,更新,添加等。 – BlackHatSamurai

+0

如果我不使用模型類?我如何在沒有它的情況下檢索數據?或者是否有必要使用它? –

0

試試這個,你忘了的getValue(),將返回值不是路徑mDatabase.child("users").child(UserID).child("profile").child("username").getValue().toString();

+0

當我嘗試使用getValue方法時,Android Studio說它無法解析該方法。任何想法爲什麼?這是我的代碼:String incom_username = mDatabase.child(「users」)。child(mUserId).child(「profile」)。child(「username」)。getValue()。toString(); –

+0

沒關係。我正在使用數據庫引用而不是DataSnapshot。謝謝! –

+0

其實,它仍然給我一個錯誤,說它不能將空對象引用轉換爲字符串。我會用一張圖片更新我的問題。 –

相關問題