[英]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.