按照教程智能投射到 'CredentialsClient!' 是不可能的
Smart cast to 'CredentialsClient!' is impossible following turtorial
我正在按照教程添加推荐的身份验证方法,但出现此错误:
Smart cast to 'CredentialsClient!' is impossible, because 'mCredentialsClient' is a mutable property that could have been changed by this time
学习教程Smart Lock for Passwords on Android
我也在尝试使用 Kotlin(Android 推荐的开发语言)
这是我的代码:
import androidx.annotation.NonNull
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.auth.api.credentials.*
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
class new_MainActivity : AppCompatActivity(){
var mCredentialsClient: CredentialsClient? = null
var mCredentialRequest: CredentialRequest? = null
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_login)
mCredentialsClient = Credentials.getClient(this)
mCredentialRequest = CredentialRequest.Builder()
.setPasswordLoginSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE)
.build()
mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
object : OnCompleteListener<CredentialRequestResponse?>() {
fun onComplete(@NonNull task: Task<CredentialRequestResponse?>) {
if (task.isSuccessful()) {
// See "Handle successful credential requests"
onCredentialRetrieved(task.getResult().getCredential())
return
}
// See "Handle unsuccessful and incomplete credential requests"
// ...
}
})
}
private fun onCredentialRetrieved(credential: Any) {
}
}
那是因为您使用 ? 将 mCredentialsClient 定义为可为空的变量。操作员。
所以每次你想使用 mCredentialsClient 时,你应该检查它是否为空。
在使用 mCredentialsClient 字段之前执行此操作,您可以说:
if(mCredentialsClient != null){
//send request
}
或者如果您想以 kotlin 方式处理它,请使用 'let' 函数,如下所示:
mCredentialsClient?.let{
it.request
}
这里检查的是mCredentialsClient是否为null,如果mCredentialsClient为null则什么也不会发生,但是如果mCredentialsClient不为null则执行花括号内的函数。
请注意,在 let 函数块内,您将使用
it
作为
mCredentialsClient
我正在按照教程添加推荐的身份验证方法,但出现此错误:
Smart cast to 'CredentialsClient!' is impossible, because 'mCredentialsClient' is a mutable property that could have been changed by this time
学习教程Smart Lock for Passwords on Android
我也在尝试使用 Kotlin(Android 推荐的开发语言)
这是我的代码:
import androidx.annotation.NonNull
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.auth.api.credentials.*
import com.google.android.gms.tasks.OnCompleteListener
import com.google.android.gms.tasks.Task
class new_MainActivity : AppCompatActivity(){
var mCredentialsClient: CredentialsClient? = null
var mCredentialRequest: CredentialRequest? = null
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_login)
mCredentialsClient = Credentials.getClient(this)
mCredentialRequest = CredentialRequest.Builder()
.setPasswordLoginSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE)
.build()
mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
object : OnCompleteListener<CredentialRequestResponse?>() {
fun onComplete(@NonNull task: Task<CredentialRequestResponse?>) {
if (task.isSuccessful()) {
// See "Handle successful credential requests"
onCredentialRetrieved(task.getResult().getCredential())
return
}
// See "Handle unsuccessful and incomplete credential requests"
// ...
}
})
}
private fun onCredentialRetrieved(credential: Any) {
}
}
那是因为您使用 ? 将 mCredentialsClient 定义为可为空的变量。操作员。 所以每次你想使用 mCredentialsClient 时,你应该检查它是否为空。 在使用 mCredentialsClient 字段之前执行此操作,您可以说:
if(mCredentialsClient != null){
//send request
}
或者如果您想以 kotlin 方式处理它,请使用 'let' 函数,如下所示:
mCredentialsClient?.let{
it.request
}
这里检查的是mCredentialsClient是否为null,如果mCredentialsClient为null则什么也不会发生,但是如果mCredentialsClient不为null则执行花括号内的函数。 请注意,在 let 函数块内,您将使用
it
作为
mCredentialsClient