首页 > 解决方案 > Java Firestore 查询快照返回字符串而不是布尔值

问题描述

我正在尝试将我的查询结果从firestore回映射到我的 java 应用程序中的一个类。

我已将其保存为Booleanweb 控制台上,请参见图像:

在此处输入图像描述

然后在应用程序上,我使用以下函数将其映射到我的班级:

query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        List<uk.wefix.FirestoreModels.Job> mJobsList = new ArrayList<>();
        if(task.isSuccessful()){
            for(QueryDocumentSnapshot document : task.getResult()) {
                uk.wefix.FirestoreModels.Job job = document.toObject(uk.wefix.FirestoreModels.Job.class);
                mJobsList.add(job);
            }
            mjobsAdaptor.clear();
            mjobsAdaptor.addAll(mJobsList);
        } else {
            Log.d("JobsFragment", "Error getting documents: ", task.getException());
        }
    }
});

它映射到的类:

public class Job {

    public String first_name;
    public String second_name;
    public String phone_number;
    public Boolean complete;

    public Job() {}

    public Job(String first_name, String second_name, String phone_number, Boolean complete) {
        this.first_name = first_name;
        this.second_name = second_name;
        this.phone_number = phone_number;
        this.complete = complete;
    }

    /**
     * @return String
     */
    public String getFirst_name(){
        return first_name;
    }

    /**
     * @return String
     */
    public String getSecond_name(){
        return second_name;
    }

    /**
     * @return String
     */
    public String getPhone_number(){
        return phone_number;
    }

    /**
     * @return Boolean
     */
    public Boolean getComplete(){
        return complete;
    }
}

似乎 Firestore 正在返回 aString而不是 aBoolean这意味着我得到以下错误:

java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type java.lang.String to boolean (found in field 'complete')

显然我可以在课堂上做这样的事情Job,但这似乎有点hacky,我不确定这只是一个错误还是我做错了什么。

潜在的“hacky”解决方案

/**
 * @return Boolean
 */
public Boolean getComplete(){
    if(complete.equals("true")){
        return true;
    }else{
        return false;
    }
}

询问:

CollectionReference jobs = db.collection("jobs");
Query query = jobs.whereEqualTo("technician_id", 10).whereEqualTo("date", "2018-12-12");

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


推荐阅读