Class is missing a constructor with no arguments - but I've provided a constructor

前端 未结 3 1296
孤城傲影
孤城傲影 2020-12-22 06:45

I am trying to retrieve the user\'s info after they log in from Firebase. I have the sneaking suspicion that this error isn\'t actually my problem - and has to deal with the

相关标签:
3条回答
  • 2020-12-22 07:36

    If all primary constructor parameters have default values, Kotlin will generate a parameterless constructor as well. In your case DateJoined is missing one. So

    data class User(
            var FirstName: String = "",
            var LastName: String = "",
            var Email: String = "",
            var Password: String = "",
            var DateJoined: ... = ...
    )
    

    (I don't know which types are allowed for fields in FireBase, but Any probably isn't one and if it is it can't be efficient.)

    0 讨论(0)
  • 2020-12-22 07:37

    Not sure about Kotlin(never used it) but i think the pojo field names have to match the Firebase entry name

    like:

    var Password: String = "",

    has the capital "P" but in your Firebase the "Password" is spelled with a lower case..

    0 讨论(0)
  • 2020-12-22 07:41

    Have a look at the Docs Here

    When using the snap.getValue(Class) getter, the class should have a 0 argument constructor.

    So unfortunatly you can't use a data class for that way. Just rewrite your class as

    class User(){
        var firstName: String = ""
        var lastName: String = ""
        var email: String = ""
        var password: String = ""
        var dateJoined: Long = 0L
    }
    

    You might want to use lower case variable names, as it is convention. Also, you can avoid Any for dateJoined, as I assume it is a UTC timestamp.

    The firebase sdk will then check for each of the database keys if a setter/public field for that name exists and if so, set it. Kotlin generates setters and getters automaticly, so you only have to make sure that the members are named the same as the keys in your database.

    Even though one of the developers once said (and this seems to not appear in the docs) that the sdk will try to access multiple nameing styles. This is quite vague, so better make sure to match the database keys.

    0 讨论(0)
提交回复
热议问题