Снимок запроса Java Firestore возвращает строку, а не логическое значение - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь отобразить результаты моего запроса из firestore обратно в класс в моем Java-приложении.

Я сохранил это как Boolean в веб-консоли, см. Изображение:

enter image description here

А затем в приложении я использую следующую функцию, чтобы сопоставить это с моим классом:

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());
        }
    }
});

И класс, который он отображаетto:

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 возвращает String вместо Boolean, что означает, что я получаю следующую ошибку:

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

Очевидно, я мог бы просто сделатьчто-то вроде этого в классе Job, но это кажется немного хакерским, и я не уверен, что это просто ошибка или я делаю что-то не так.

Потенциальное «хакерское» решение

/**
 * @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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...