簡體   English   中英

如何從 Firebase 實時數據庫中檢索數據並將其顯示在配置文件儀表板中

[英]How to retrieve data from firebase realtime database and display it in profile dashboard

所以我試圖顯示與已登錄用戶相關的數據,但與它相關的數據返回空我已經嘗試了多種解決方案,但沒有奏效

public class HomeViewModel extends ViewModel {

private MutableLiveData<String> mText;
DatabaseReference userdata;
String namedata;

public HomeViewModel() {
    userdata = FirebaseDatabase.getInstance().getReference();

    userdata.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot snap : dataSnapshot.getChildren()){
                User user = snap.getValue(User.class);
                namedata = user.getUserId();

            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
    mText = new MutableLiveData<>();
    mText.setValue("Welcome back! " +namedata);
}

public LiveData<String> getText() {
    return mText;
}}`

在此處輸入圖片說明

這是我想獲取這些數據並將其顯示在視圖中的 User.class

public class User {
String userId;
String userPhone;
String userGender;

public User() {

}

public User(String userId, String userPhone, String userGender) {
    this.userId = userId;
    this.userPhone = userPhone;
    this.userGender = userGender;
}



public String getUserId() {
    return userId;
}

public String getUserPhone() {
    return userPhone;
}

public String getUserGender() {
    return userGender;
}}

您必須調用“userId”

@Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot snap : dataSnapshot.getChildren()){
                    HashMap<String, String> map = (HashMap<String, String>) snap.getValue();
                    if (map.containsKey("userId")) {
                        if (map.get("userId").equals("william henry")) {
                            String userGender = map.get("userGender");
                        }
                    }
                }
            }

或者

@Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot snap : dataSnapshot.getChildren()){
                    HashMap<String, String> map = (HashMap<String, String>) snap.getValue();
                    if (map.containsKey("userId")) {
                        String userGender = map.get("userId");
                    }
                }
            }

首先FirebaseDatabase.getInstance().getReference()指向您的根目錄(這是您數據庫上方的鏈接)。因此您需要指向您想要獲取的內容(即用戶樹)。 其次,您必須在 onDataChange 中設置您的數據,因為它不會同步功能(意味着您的姓名數據始終不遵循從 onDataChange 返回的數據)

 FirebaseDatabase.getInstance().getReference().child("User").orderByChild("userId").equalTo(*your_logged_in_user_id*).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        Iterator iterator = dataSnapshot.getChildren().iterator()
        if(iterator.hasNext()){
            User user = iterator.next().getValue(User.class)
            }
                name = user.getName();
            }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

你得到 null 因為你沒有從正確的節點獲取值。 有用戶的孩子,您想獲得用戶孩子的值。

userdata = FirebaseDatabase.getInstance().getReference().child("User");
userdata.addOnChildEventListener( new ChildEventListener() {

                @Override
                public void onChildAdded(DataSnapshot snap, String previousChildName) {
                //get value here.
                  User user = snap.getValue(User.class);
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {

                }

                @Override
                public void onCancelled(DatabaseError error) {
                }
            });

您想獲取單個用戶數據,然后 userdata = FirebaseDatabase.getInstance().getReference().child("User").child(userIdOfthatuser);

userdata.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snap) {

                User user = snap.getValue(User.class);
                namedata = user.getUserId();


        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

暫無
暫無

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

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