java - Firebase 数据映射到 Java 类

标签 java android json firebase firebase-realtime-database

我使用 Firebase 作为后端,我能够获取数据,但无法将其映射到 Java 类。我还尝试使用 JSONObject 进行映射,但问题是我应该忽略 key(1),因为我是根据电子邮件值进行查询。

数据

users  
   1:
     email: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f380929e839f96b3969e929a9fdd909c9e" rel="noreferrer noopener nofollow">[email protected]</a>
     firstName: Big
     lastName: Ben
     groups:
        instructor: true

Firebase 相关代码:

Firebase ref = new Firebase("firebaseURL");
    Query queryRef = ref.orderByChild("email").equalTo(mEmailEdit.getText().toString()).limitToFirst(1);
    // Attach an listener to read the data at our posts reference

    queryRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            User user = snapshot.getValue(User.class);
            System.out.println("user : " + user);
            System.out.println("children : " + snapshot.getChildren().iterator().next());
            mProgressDialog.dismiss();
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            System.out.println("The read failed: " + firebaseError.getMessage());
        }
    });

User.java

public class User {
    private String email;
    private String firstName;
    private String lastName;
    private Group group;

    public User(){}

    public User(String email, String firstName, String lastName) {
        this.email = email;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

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

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Group getGroup() {
        return group;
    }

    public void setGroup(Group group) {
        this.group = group;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        return email.equals(user.email);

    }

    @Override
    public int hashCode() {
        return email.hashCode();
    }

    public class Group{
        private boolean isInstructor;
        private boolean isManager;

        public Group(){}

        public Group(boolean isInstructor, boolean isManager) {
            this.isInstructor = isInstructor;
            this.isManager = isManager;
        }

        public boolean isInstructor() {
            return isInstructor;
        }

        public void setIsInstructor(boolean isInstructor) {
            this.isInstructor = isInstructor;
        }

        public boolean isManager() {
            return isManager;
        }

        public void setIsManager(boolean isManager) {
            this.isManager = isManager;
        }

        @Override
        public String toString() {
            return "Group{" +
                    "isInstructor=" + isInstructor +
                    ", isManager=" + isManager +
                    '}';
        }
    }

    @Override
    public String toString() {
        return "User{" +
                "email='" + email + '\'' +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", group=" + group +
                '}';
    }
}

最佳答案

我已经明白了。在 onDataChanged 方法中,我放置了下面的代码以将数据映射到 User 类。

snapshot.getChildren().iterator().next().getValue(User.class)
// snapshot.getChildren().iterator().next() // returns the child of the returned data
// .getValue(User.class) // since we already retrieved the child, and we're 
//                       // now referring to User class data, we can now
//                       // map the data using Firebase method (getValue(Class<T>))

关于java - Firebase 数据映射到 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666786/

相关文章:

java - 尝试引用 Jar 文件时 Eclipse 出现不支持的 Major.minor 版本 51.0 错误

java - 与Hibernate事务代码相关的问题

java - 排行榜配置错误

iphone - iPhone 上的 JSON 和核心数据

python - 通过python上传JSON到谷歌云存储

json - 将 JSON 数据作为表格导入到 google 表格中

java - 如何流式传输和收集对象集合的实例方法结果?

java - 整数数组列表到字符串的转换

android - 无法从中加载模块元数据

java - CardView 滑动操作 - Material - Android Java