注销后,Firebase用户getToken会生成NullPointerException

时间:2017-06-02 18:21:31

标签: java android firebase firebase-authentication firebaseui

在我的应用程序中,当用户注销时,它应该向服务器发送请求以指示用户已注销并清理服务器端的内容。

在用户成功退出Firebase后发送它是有意义的。我正在使用具有signOut功能的Firebase UI,它返回一个Task对象,可用于检查用户是否成功注销,如果成功则发送请求。

但是当我尝试使用getToken()为请求生成令牌时,尽管FirebaseUser对象不为null,它仍然给我NullPointerException。

public void signOut(View v) {
    AuthUI.getInstance()
            .signOut(this)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        serverCleanUp();    // make sure the user sign out successfully before sending to server
                    } else {
                        // handle error...
                    }
                }
            });

}

public void serverCleanUp() {
    // mUser is the user object saved when signed in
    if (mUser != null) {
        mUser.getToken(true)    // give me NullPointerException in this line
                .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                    public void onComplete(@NonNull Task<GetTokenResult> task) {
                        // send request if success, handle error otherwise...
                    }
                });
    }
}

我认为这是因为当用户退出时,Firebase不希望用户生成令牌来执行请求。但是当我阅读doc时,它表示Firebase用户对象即使在注销后仍然可以完全正常运行,这是否意味着除了getToken之外一切都有用?

编辑:这不是由mUser引起的nullPointerException为null,因为我确保它不为null,并且我尝试调用另一个FirebaseUser方法,例如getEmail()在getToken()之前看它是否正常工作,并且getEmail正常工作,而getToken仍然抛出nullPointerException。

堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.internal.zzbmn com.google.firebase.auth.FirebaseUser.zzVI()' on a null object reference
    at com.google.firebase.auth.FirebaseAuth.zza(Unknown Source)
    at com.google.firebase.auth.FirebaseUser.getToken(Unknown Source)
    at com.example.user.myapp.MainActivity.serverCleanUp(MainActivity.java:232)
    at com.example.user.myapp.MainActivity.access$500(MainActivity.java:36)
    at com.example.user.myapp.MainActivity$5.onComplete(MainActivity.java:219)
    at com.google.android.gms.tasks.zzc$1.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

0 个答案:

没有答案