簡體   English   中英

Firebase 數據庫查詢返回錯誤結果

[英]Firebase Database Query Returning Wrong Results

我有一個 Android Studio 應用程序,它查詢用戶並根據用戶登錄憑據(電子郵件)提取用戶信息。 所以我將 email 從一個活動(登錄)傳遞到另一個活動(配置文件)。 在 ProfileActivity 中,我查詢 Firebase 數據庫,我使用用戶 email 地址來提取特定的用戶信息,例如:全名、職業、地址等。這是我的數據庫的結構:

user-registration-app
   users
      -Lu8jvjlDWKbgK1ibeku
         email: johndoe@gmail.com
         fullname: John Doe
         address: 1234 nw thistreet
         profession: developer
 -Lu8jvjlDWKbgK1ibeku
         email: janed@gmail.com
         fullname: Jane d
         address: 3444 nw thistreet
         profession: diver

因此,在配置文件活動中,我創建了對“用戶”的引用,然后創建了orderbychild() ,其中 email 等於 johndoe@gmail.com,但返回了一些奇怪的地址(內存地址)。

Intent intent = getIntent();
String email = intent.getStringExtra("email");

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child(USERS);
Log.v("EMAILADD", String.valueOf(userRef.orderByChild("email").equalTo(email)));

在訪問 orderByChild("email") 之前是否需要訪問密鑰 ID? 任何幫助表示贊賞。

但正在返回一些奇怪的地址(內存地址)

這是預期的行為,因為您嘗試記錄 Firebase 查詢 object 的字符串表示形式。

userRef.orderByChild("email").equalTo(email)

返回 Firebase 類型的object 實時數據庫查詢

如果要獲取與該查詢對應的值,則應將該查詢保存到變量並使用偵聽器,如以下代碼行所示:

Query query = userRef.orderByChild("email").equalTo(email);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String email = ds.child("email").getValue(String.class);
            Log.d(TAG, email);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
query.addListenerForSingleValueEvent(valueEventListener);

暫無
暫無

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

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