【问题标题】:How to get an object of my model (POJO) class from Firestore?如何从 Firestore 获取我的模型(POJO)类的对象?
【发布时间】:2019-01-03 21:26:28
【问题描述】:

我正在测试 Firestore 以使其更加熟悉并在我的项目中实现,但由于某种原因,我无法从数据库中取回 POJO 类的对象。我知道我可以将数据作为地图获取,但我想要我的 POJO 类。我遵循了许多答案来帮助我入门,但我无法解决这个问题。这是我的代码:

mDocumentReference.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            UserPOJO pojo = (UserPOJO) task.getResult(); //Error
        }
    }
});

getResult() 对我没有帮助。所以我用 POJO 添加了我的数据,我的问题是,如何将它作为 POJO 恢复?

我的 POJO:

public class UserPOJO {
    private String name, email, id, college, state;
    private int age, number;

    public UserPOJO() {
    }

    public UserPOJO(String name, String email, String id, String college, String state, int age, int number) {
        this.name = name;
        this.email = email;
        this.id = id;
        this.college = college;
        this.state = state;
        this.age = age;
        this.number = number;
    }

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getCollege() {
        return college;
    }

    public void setCollege(String college) {
        this.college = college;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

我的错误:

错误:不兼容的类型:DocumentSnapshot 无法转换为 UserPOJO

【问题讨论】:

  • 发布堆栈溢出时,请发布所有相关代码(包括您的 POJO)、您收到的错误消息(通常是整个异常堆栈跟踪)以及您希望读取的数据库内容.如果没有所有这些信息,我们就无法判断您出了什么问题。
  • @DougStevenson 添加了 POJO 和错误。谢谢!
  • @ErolEngineer 我期待这样的错误。请在下面查看我的答案。

标签: java firebase firebase-realtime-database google-cloud-firestore


【解决方案1】:

task 对象上调用getResult() 方法时无法获得UserPOJO 对象,因为它永远不会返回这样的对象,它将返回DocumentSnapshot 对象。即使您将其转换为 UserPOJO 对象,它也对您毫无帮助。 Java 中无法将DocumentSnapshot 对象转换为UserPOJO,因为它们之间没有任何关系。

通过official documentation,您可以通过以下方式从数据库中获取UserPOJO 类的对象:

mDocumentReference.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                //Get an object of type UserPOJO
                UserPOJO pojo = document.toObject(UserPOJO.class);
            }
        }
    }
});

看,解决这个问题的关键是使用DocumentSnapshot.toObject()'s方法。

【讨论】:

  • 是的,它正在工作。我将使用 toObject 函数。谢谢!
  • 很有帮助。谢谢!
猜你喜欢
  • 2018-09-09
  • 2017-10-08
  • 1970-01-01
  • 2018-01-17
  • 2018-08-12
  • 1970-01-01
  • 2014-12-08
  • 2021-06-14
相关资源
最近更新 更多