简体   繁体   English

firebase 实时数据库 W/ClassMapper:在课堂上找不到 setter/field

[英]firebase realtime database W/ClassMapper: No setter/field for found on class

First time working with Firebase realtime database I'm trying to read data from the database with Android application this is my first experience I'm sorry I'm used to working with MySQL so this JSON format seem to be complicated for me第一次使用 Firebase 实时数据库 我正在尝试使用 Android 应用程序从数据库中读取数据 这是我的第一次体验 对不起,我习惯使用 MySQL,所以这种 JSON 格式对我来说似乎很复杂

I get the error No setter/field for found on class.我收到错误 No setter/field for found on class。

private FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();

DatabaseReference mDbRef = mDatabase.getReference().child("users");

    mDbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Users user = dataSnapshot.getValue(Users.class);

            Log.d("result", "User name: " + user.getName() + ", email " + user.getEmail());
        }

        @Override
        public void onCancelled(DatabaseError error) {
            Log.w("error", "Failed to read value.", error.toException());
        }
    });

database example数据库示例

and this my Users class这是我的用户类

public class Users {

    private String phone;
    private String email;
    private String name;
    private String adresse;
    private String ville;
    private String zip;

    public Users() {
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public String getVille() {
        return ville;
    }

    public void setVille(String ville) {
        this.ville = ville;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }
}

I have attached an image for the struct of the database if anyone have any solution please help me我附上了数据库结构的图像,如果有人有任何解决方案,请帮助我

To solve this problem, you need to loop through entire users node using getChildren() method, like in the following lines of code:要解决此问题,您需要使用getChildren()方法遍历整个users节点,如下面的代码行所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Users users = ds.getValue(Users.class);
            Log.d("result", "User name: " + user.getName() + ", email " + user.getEmail());
        }
    }

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

The result in your logcat will be the name and email of all users. logcat 中的结果将是所有用户的姓名和电子邮件。

You should use ChildEventListener as your data is a list , if u use ValueEventListener then it will return the entire list of data as a single DataSnapshot which is not the recommended way.您应该使用 ChildEventListener 因为您的数据是一个列表,如果您使用 ValueEventListener 那么它会将整个数据列表作为单个 DataSnapshot 返回,这不是推荐的方式。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
     Users user = dataSnapshot.getValue(Users.class);
     Log.d("result", "User name: " + user.getName() + ", email " + user.getEmail());
}

@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 databaseError) {

  }
 };
usersRef.addChildEventListener(childEventListener);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM