Java Firebase结果循环中的空对象引用

Java Firebase结果循环中的空对象引用,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我想接收Firestore中的所有挑战,并循环结果以将其添加到ArrayList中 db.collection("challenges") .get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapsho

我想接收Firestore中的所有挑战,并循环结果以将其添加到ArrayList中

db.collection("challenges")
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (DocumentSnapshot document : task.getResult()) {
                        if (document.exists()) {
                            Log.d(TAG, document.getId() + " => " + document.getData());
                    Error-> Challenge challenge = document.toObject(Challenge.class);
                            Log.d(TAG, challenge.getUid() + " => " + challenge.getText());
                            challengeList.add(document.getData().toString());
                        }
                    }

                    challengeListView.setAdapter(challengeArrayAdapter);
                } else {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
            }
        });
行:

带有
log.d(标记,document.getId()+“=>”+document.getData())的日志
他正在工作

参考:

这是我的挑战课:

public class Challenge {

    private Date createdAt;
    private Date changedAt;
    private String uid;
    private String text;
    private double longitude;
    private double latitude;

    public Challenge(String uid, String text, double longitude, double latitude) {
        Date currentDate = new Date();
        this.createdAt = currentDate;
        this.changedAt = currentDate;
        this.uid = uid;
        this.text = text;
        this.longitude = longitude;
        this.latitude = latitude; }

    public Date getCreatedAt() { return createdAt; }

    public Date getChangedAt() { return changedAt; }

    public String getUid() { return uid; }

    public String getText() { return text; }

    public double getLongitude() { return longitude; }

    public double getLatitude() { return latitude;}
}

您需要更改这行代码:

Challenge challenge = document.toObject(Challenge.class);

错误是由于您的modell类引起的。你的代码看起来不错。在模型类中添加无参数构造函数。保留该代码或使用
地图
,您的问题将得到解决

要添加无参数构造函数,请在模型类中添加以下代码行:

public Challenge() {} //Needed for Firebase

在类变量解除关联之后。

我知道这已经太晚了,但在我的情况下,它可能会对某些人有所帮助,因为我的对象是

public class RFQ {
    public String content,email,receiverKey,productKey,companyKey;
    public Sender sender;
    public Long createAt;

    public RFQ() {
    }

    public RFQ(String content, String email, String receiverKey, String productKey, String companyKey, Sender sender, Long createAt) {
        this.content = content;
        this.email = email;
        this.receiverKey = receiverKey;
        this.productKey = productKey;
        this.companyKey = companyKey;
        this.sender = sender;
        this.createAt = createAt;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getEmail() {
        return email;
    }

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

    public Long getCreateAt() {
        return createAt;
    }

    public void setCreateAt(Long createAt) {
        this.createAt = createAt;
    }

    public String getReceiverKey() {
        return receiverKey;
    }

    public void setReceiverKey(String receiverKey) {
        this.receiverKey = receiverKey;
    }

    public String getProductKey() {
        return productKey;
    }

    public void setProductKey(String productKey) {
        this.productKey = productKey;
    }

    public String getCompanyKey() {
        return companyKey;
    }

    public void setCompanyKey(String companyKey) {
        this.companyKey = companyKey;
    }

    public Sender getSender() {
        return sender;
    }

    public void setSender(Sender sender) {
        this.sender = sender;
    }
}

这里的一切都是正确的,但我还是得到了一个错误,这是由于我的Sender类中的Sender类没有放置非args构造函数造成的。

Bro,您需要在您的质询模型类中添加默认构造函数,因为Firebase需要它

public Challenge(){}
//添加此行


但我想查询挑战中的所有数据。有没有一种方法可以在不选择特定文档的情况下执行此操作?如果您想要单个文档,则需要使用上述代码。如果你想要所有的文档,你需要在整个集合中循环。但是我想我会像firebase文档那样查询集合的所有数据
document.toObject(Challenge.class)
返回什么?空?请分享您的
挑战
课程。
Map<String, Object> map = task.getResult().getData());
DocumentReference docRef = db.collection("challenges").document("yourDocument");
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        Challenge challenge = documentSnapshot.toObject(Challenge.class);
    }
});
public Challenge() {} //Needed for Firebase
public class RFQ {
    public String content,email,receiverKey,productKey,companyKey;
    public Sender sender;
    public Long createAt;

    public RFQ() {
    }

    public RFQ(String content, String email, String receiverKey, String productKey, String companyKey, Sender sender, Long createAt) {
        this.content = content;
        this.email = email;
        this.receiverKey = receiverKey;
        this.productKey = productKey;
        this.companyKey = companyKey;
        this.sender = sender;
        this.createAt = createAt;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getEmail() {
        return email;
    }

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

    public Long getCreateAt() {
        return createAt;
    }

    public void setCreateAt(Long createAt) {
        this.createAt = createAt;
    }

    public String getReceiverKey() {
        return receiverKey;
    }

    public void setReceiverKey(String receiverKey) {
        this.receiverKey = receiverKey;
    }

    public String getProductKey() {
        return productKey;
    }

    public void setProductKey(String productKey) {
        this.productKey = productKey;
    }

    public String getCompanyKey() {
        return companyKey;
    }

    public void setCompanyKey(String companyKey) {
        this.companyKey = companyKey;
    }

    public Sender getSender() {
        return sender;
    }

    public void setSender(Sender sender) {
        this.sender = sender;
    }
}