我正在开发一款Kotlin Android应用,而且我在整合Google登录时遇到了问题,当我获取GoogleSignInAccount以提取属性时,属性名称似乎被混淆(或以其他方式混乱),这里是AS 2.3调试器上属性的截图:
这是尝试访问这些属性的代码片段:
private fun googleSignInResult(data : GoogleSignInResult) {
if (data.isSuccess) {
if (data.signInAccount != null) {
val account = data.signInAccount
val authData = HashMap<String, String>()
authData["id_token"] = account?.idToken.let { it } ?: return
authData["id"] = account?.id.let { it } ?: return
val task = ParseUser.logInWithInBackground("google", authData)
task.continueWith { user ->
if (task.isCancelled) {
Log.d(TAG, "User cancelled Google login")
} else if (task.isFaulted) {
Log.d(TAG, "Failed: " + task.error)
} else {
this.user = task.result
this.user?.put("email", account?.email)
this.user?.put("name", account?.displayName)
this.user?.put("firstName", account?.displayName)
this.user?.saveInBackground({ error ->
if(error != null) {
Log.d(TAG, "Error: " + error.message)
this.user?.deleteInBackground()
ParseUser.logOutInBackground()
} else {
//Logged in successfully
}
})
}
}
}
}
}
任何人都可以解释为什么属性看起来像那样?当我尝试访问idToken或id时,他们总是为null,但是,属性名称是&#34;混淆了&#34;无法访问,这是一个kotlin错误还是我的错误?
非常感谢任何帮助!
答案 0 :(得分:1)
以下内容最初由@EugenPechanec发布,作为对问题正文的评论。应用一些修改来促进阅读体验。
来自JVM的术语 Fields 不是属性,这是Kotlin术语。你在JVM上,你在调试器中看到的是支持Kotlin属性的混淆字段。吸气剂是公开的并保留原始名称。 Kotlin中的Java .getDisplayName()
是 .displayName 。