#java #android #firebase #google-cloud-firestore
#java #Android #firebase #google-облако-firestore
Вопрос:
Я пытался загрузить пользовательский объект из Firestore после его загрузки, в документе есть информация, но он не преобразует ее в пользовательский объект, и получение отдельных значений из документа также не работает. Я получаю каждое поле моего пользовательского объекта как null рядом с одним целым числом, которое получает 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();
}
});
содержимое документа из отладчика:
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@gmail.com/night test_0?alt=mediaamp;token=7242371e-a853-48d7-adab-05795493c352, https://firebasestorage.googleapis.com/v0/b/gsdemo-3f97f.appspot.com/o/yuvala2001@gmail.com/night test_1?alt=mediaamp;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();
}
});
Комментарии:
1. Пожалуйста, покажите точное содержимое документа, который вы пытаетесь преобразовать, а также то, как вы ожидаете, что его поля будут отображены в объект Flight. Также, пожалуйста, покажите весь класс полета, не вырезайте получатели и установщики, поскольку их имена имеют значение.
2. @DougStevenson Я отредактировал свой вопрос с помощью методов получения, настройки и снимка экрана с экрана firestore. имена переменных совпадают с именами в пользовательском объекте и firestore
3. @DougStevenson Как я уже писал, все мои поля обнуляются рядом с графическими изображениями, которые принимают 0 в качестве значения, вместо этого предполагается, что там есть информация из firestore. И из того, что я заметил, в logcat не появилось ошибок по этому поводу
4. Существует ли запрошенный документ на самом деле? Проверьте метод exists для объекта snapshot. У нас нет гарантии, что вы запрашиваете именно то, что вы показали здесь.
5. @DougStevenson Я проверил, используя точку останова, я смог получить оба документа, но информация не могла быть преобразована из document в Flight object