Проблема преобразования documentSnapshot в пользовательский объект - PullRequest
0 голосов
/ 12 марта 2019

Я пытался загрузить пользовательский объект из Firestore после загрузки, документ действительно имеет информацию, но он не конвертирует его в пользовательский объект, и получение отдельных значений из документа также не работает.Я получаю каждое поле моего пользовательского объекта как ноль, кроме одного целого числа, которое получает 0, хотя оно не должно быть равным 0. Код для загрузки:

 DocumentReference docRef = FirebaseFirestore.getInstance().collection(email).document(flightName);
    docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            Flight flight = documentSnapshot.toObject(Flight.class);
            flightArrayList.add(flight);
            recyclerView.setAdapter(myadapter);
        }
    });

код для моего класса Flight:

private String name, email;
private int countPictures;
private String dateStart, dateEnd;
private ArrayList<String> links;

 public Flight() {

}

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 int getCountPictures() {
    return countPictures;
}

public void setCountPictures(int countPictures) {
    this.countPictures = countPictures;
}

public String getDateStart() {
    return dateStart;
}

public void setDateStart(String dateStart) {
    this.dateStart = dateStart;
}

public String getDateEnd() {
    return dateEnd;
}

public void setDateEnd(String dateEnd) {
    this.dateEnd = dateEnd;
}

public ArrayList<String> getLinks() {
    return links;
}

public void setLinks(ArrayList<String> links) {
    this.links = links;
}

Код загрузки:

    DocumentReference docRef = FirebaseFirestore.getInstance().collection(flight.getEmail()).document(flight.getName());
    Map<String, Object> flightObject = new HashMap<>();
    flightObject.put("FLIGHT", flight);
    docRef.set(flightObject)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Toast.makeText(SaveAct.this, "saved", Toast.LENGTH_LONG).show();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(SaveAct.this, "error", Toast.LENGTH_LONG).show();

                }
            });

Экран Firestore: enter image description here

содержимое документа из отладчика:

Document{key=yuvala2001@gmail.com/night test, data=ArraySortedMap{(FLIGHT=>ArraySortedMap{(countPictures=>2), (dateEnd=>2019-03-12 19:30), (dateStart=>2019-03-12 19:30), (email=>yuvala2001@gmail.com), (links=>[https://firebasestorage.googleapis.com/v0/b/gsdemo-3f97f.appspot.com/o/yuvala2001%40gmail.com%2Fnight%20test_0?alt=media&token=7242371e-a853-48d7-adab-05795493c352, https://firebasestorage.googleapis.com/v0/b/gsdemo-3f97f.appspot.com/o/yuvala2001%40gmail.com%2Fnight%20test_1?alt=media&token=b249ea0a-55bb-46e0-b8b0-f8f1c065c613]), (name=>night test)};)};, version=SnapshotVersion(seconds=1552411921, nanos=640212000), documentState=SYNCED}

Редактировать:

Я исправил код, проблема заключалась в загрузке объекта внутри карты, в соответствии с документацией Firebase это не будет загружать его правильно для загрузки.Правильный код для загрузки:

DocumentReference docRef = FirebaseFirestore.getInstance().collection(flight.getEmail()).document(flight.getName());
    docRef.set(flight)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Toast.makeText(SaveAct.this, "saved", Toast.LENGTH_LONG).show();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(SaveAct.this, "error", Toast.LENGTH_LONG).show();

                }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...