Search code examples
androidfirebasekotlingoogle-cloud-firestore

Drop "is" prefix for Firebase Firestore fields for Boolean Values


When using custom Kotlin objects for firestore drop 'is' prefix. It ruined my entire day.

data class UberRequest(val geoPoint: GeoPoint? = null,
                   
                   //don't use 'is' prefix on boolean properties
                   val isAccepted:Boolean = false,
                   @ServerTimestamp
                   val timestamp: Date? = null)

I noted on the console that 'is' is dropped as shown on this snapshot from firestore console enter image description here

So when you try to retrieve the isAccepted value it returns the default value which in this case is false. If the default value is null, you get a null value back

This is illustrated on this snapshot from my logcat

enter image description here


I noted on the console that 'is' is dropped as shown on this snapshot from firestore console enter image description here

So when you try to retrieve the isAccepted value it returns the default value which in this case is false. If the default value is null, you get a null value back

This is illustrated on this snapshot from my logcat

enter image description here


Solution

  • Firestore uses Java Bean conventions for mapping properties between the Java class and the JSON in the database.

    In Java Beans an is prefix on a boolean field/method indicates a boolean property. So the fact that your isAccepted is mapped to a JSON property with the name accepted is expected.


    If you want to control the name that Firebase uses in its JSON mapping, you can annotate the field/methods with @PropertyName("isAccepted").