2017-08-08 63 views
1
Android Studio 3.0 

我有转换为我的项目的Kotlin的java代码。处理kotlin中可以返回null的对象

public String getAuthUserEmail() { 
     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
     String email = null; 
     if (user != null) { 
      email = user.getEmail(); 
     } 
     return email; 
} 

我已经转换它koklin这样的:

fun getAuthUserEmail(): String? { 
     val user: FirebaseUser? = FirebaseAuth.getInstance().currentUser 

     return user?.email 
    } 

我只是在我的科特林版本想,如果用户恰好是零。我是否需要有if条件来检查用户是否为空?

我能有功能作为一个行

fun getAuthUserEmail(): String? { 
     return FirebaseAuth.getInstance().currentUser.email? 
    } 

,并会调用函数需要处理一个空字符串,可能是从函数返回?

的任何建议

回答

1

非常感谢我是否需要有一个if条件,以检查用户是否为空?

据火力地堡的doc:

返回当前登录的FirebaseUser或有没有空。

使用getCurrentUser()!= null来检查用户是否登录。

所以,这取决于你想如何处理时,有没有登录的用户。

如果你想要的功能是一个成荫,你可以这样IT连锁:

fun getAuthUserEmail(): String? { 
    return FirebaseAuth.getInstance().currentUser?.email 
} 

这将返回null如果currentUser为空或currentUser?.email为空。


编辑:如果您只是想返回电子邮件,如果它存在。可以将它写在一行中,因为safe calls可以链接在一起。

1

小建议。如果确定对象不应该为空,但可以为空,则使用!!将对象标记为不应为空的对象。如果应用程序崩溃它是好的,因为它表明你在某个地方做了不好的实现。看看你的执行的结构就知道wheter对象应该是空或不是,没有很多的开发者过度使用objet?.let的期待,如果此对象应为空或不

1

如果用户我只是在我的科特林版本疑惑恰好是 null。我是否需要有if条件来检查用户是否为 null?

取决于你如何去处理方案的情况下,但你可以形成 您在如下Elvis Operator双向数据:

fun getAuthUserEmail(): String? { 
    return FirebaseAuth.getInstance().currentUser?.email ? "No data" 
}