2017-03-22 73 views
0

我正在開發一個Kotlin Android應用程序,並且我遇到了集成Google Sign In的問題,當我獲取GoogleSignInAccount以提取屬性時,屬性名稱似乎被混淆了(或以其他方式混亂達),這裏的道路上的屬性看2.3調試器的截圖:Kotlin - 模糊屬性名稱

Debugger

這裏的代碼試圖訪問這些屬性的片段:

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時,它們總是爲空,但是,「混淆」的屬性名稱無法訪問,這是一個kotlin錯誤還是我的錯誤?

任何幫助將不勝感激!

+4

fields!= properties。你在JVM上,你在調試器中看到的是混淆字段。獲得者是公開的並保留原來的名字。 Java'.getDisplayName()'='.displayName'在Kotlin中。 –

回答

1

以下內容最初由@EugenPechanec發佈,作爲對問題主體的評論。應用一些修改來提升閱讀體驗。


字段,JVM從一個術語,是不是性質,這是一個科特林術語。你在JVM上,你在調試器中看到的是支持Kotlin屬性的混淆字段。獲得者是公開的並保留原來的名字。 Java .getDisplayName()。顯示名稱在Kotlin。

+0

感謝您的回答和澄清@EugenPechanec,但是,我已經嘗試過,它不工作,執行以下操作:'account?.idToken'(the kotlin getter)或'account?.getIdToken()'(the Java getter)都返回null,這就是爲什麼我認爲我做錯了什麼,但我無法弄清楚它是什麼 –