类缺少一个没有参数的构造函数 – 但是我提供了一个没有参数的构造函数
我正在尝试从Firebase登录后检索用户的信息。 我有偷偷的怀疑,这个错误实际上不是我的问题 – 而且必须处理这个事实,我使用ServerValue.Timestamp
来存储用户注册时的日期/时间(因为我试图把日期退回去了,我的class级也不知道该怎么办)。 我的数据库看起来像这样:
登录时,这是我用来获取用户信息的代码
//grab user's name from firebase //drill down to specific user val usersRef = FirebaseDatabase.getInstance().getReference("Users") val loggedInUserRef = usersRef.child(user.uid) //specific to the logged in user val dataRef = loggedInUserRef.child("UserInfo") //get logged in user info //attach listener dataRef.addListenerForSingleValueEvent(object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { // Get Post object and use the values to update the UI val user_data = dataSnapshot.getValue(User::class.java) Log.w(TAG, dataSnapshot.value.toString()) //add relevant data to shared preferences prefs.userName = "$user_data.FirstName $user_data.LastName" } override fun onCancelled(databaseError: DatabaseError) {} })
我有我的用户类在一个单独的文件在这里:
package androidproject.project_rc data class User( var FirstName: String = "", var LastName: String = "", var Email: String = "", var Password: String = "", var DateJoined: Any )
围绕这一行: val user_data = dataSnapshot.getValue(User::class.java)
是哪里错误被抛出 – 什么给?
看看这里的文档
当使用snap.getValue(Class)getter时,类应该有一个0参数的构造函数。
所以不幸的是你不能用这种方式使用数据类。 只要重写你的课程
class User(){ var firstName: String = "" var lastName: String = "" var email: String = "" var password: String = "" var dateJoined: Long = 0L }
您可能需要使用小写variables名称,因为这是惯例。 此外,你可以避免任何dateJoined,因为我认为它是一个UTC时间戳。
如果存在该名称的setter / public字段,则firebase sdk将检查每个数据库密钥,如果存在,请设置它。 Kotlin自动生成setter和getters,所以你只需要确保成员的名字与数据库中的键相同。
即使其中一位开发者曾经说过(这似乎并没有出现在文档中),SDK将尝试访问多种命名风格。 这是相当模糊的,所以最好确保匹配数据库键。
不知道Kotlin(从未使用过),但我认为Pojo字段名称必须与Firebase条目名称匹配
喜欢:
var Password:String =“”,
有大写字母“P”,但在您的Firebase中,“密码”拼写为小写。
如果所有的主要构造函数参数都有默认值,Kotlin也会生成一个无参数的构造函数。 在你的情况DateJoined
缺少一个。 所以
data class User( var FirstName: String = "", var LastName: String = "", var Email: String = "", var Password: String = "", var DateJoined: ... = ... )
(我不知道FireBase中允许哪些types的字段,但是可能不是一个,如果是的话,效率就不高。)
- RxJava和Kotlin数据类copy()操作中的线程切换成本
- 无法传递结果ResultInfo {who = null,request = 2,result = 0,data = null}相机
- Kotlin:如何获取字符串中“@”后面的字符?
- 如何通过setOnEditorActionListener关闭android alert对话框本身?
- Google Guava Invokedynamic要求–min-sdk-version> = 26
- 通过Retrofit 2上传图像时是否可以显示进度条?
- 如何解决INSTALL_FAILED_DEXOPT这个错误?
- Android Studio 3 / Kotlin代码覆盖
- Android:为什么没有一个静态方法来获得主线程的处理程序?