При использовании правил безопасности, как @DougStevenson упомянул в своем ответе, это решение этой проблемы, также обратите внимание, что есть другой подход, который может вас заинтересовать.
Согласно официальной документации Документы Firestore могут содержать свойства, которые могут содержать значения null
. Таким образом, null
- это поддерживаемый тип данных :
Облачное хранилище файлов позволяет вам писать различные типы данных внутри документа, включая строки, логические значения, числа, даты, null , а также вложенные массивы и объекты.
Поэтому, если вы запрашиваете коллекцию для документов, и некоторые из них имеют свойства со значениями null
, при получении значений таких свойств NullPointerException
будет брошено. Этот подход полезен, поскольку он также позволяет создавать запросы, которые могут ограничивать результаты, если свойство содержит значение null
. В Kotlin такой запрос выглядит следующим образом:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance()
Query queryForNullValues = rootRef.collection("coll").whereEqualTo("field2", null)
Еще одна вещь, о которой вы должны позаботиться, это то, что это решение не то же самое, что пропустить свойство. Если вы используете классы модели (POJO) для записи данных в Firestore, все пустые свойства будут автоматически сохранены как null
, а не как вовсе.
Редактировать:
Как я уже упоминал в своем ответе, когда вы используете следующую строку кода:
val fieldvalue = value.getString("field2")
Вы можете получить исключение NullPointerException, если некоторые документы в вашей коллекции содержат null
в качестве значения в field2
.
Именно в этом и заключается проблема.
Разве это не то, что вы искали? Есть ли способ поставить проверку нулевого указателя, потому что я Я знаю, что документ B выдаст мне ошибку. "?
Чтобы решить эту проблему, просто проверьте свои fieldvalue
против null
:
if(fieldvalue != null) {
//Use the value of fieldvalue
}
Это приложение предназначено для cra sh на этом?
Да, и это потому, что вы пытаетесь получить значение null
.
val fiedlvalue = value.getString ( "field1")
Не обрабатывается sh, поскольку в вашей коллекции нет документа, в котором хранится в вашем field1
свойстве значение null
.