【问题标题】:sign out firebase android studio退出firebase android工作室
【发布时间】:2018-11-07 05:54:01
【问题描述】:

我退出菜单活动后代码崩溃,它打开徽标活动但它不起作用并在之后立即停止工作

else if (id == R.id.nav_sair) {

                AlertDialog.Builder builder=new AlertDialog.Builder(RealMenuActivity.this); //Home is name of the activity
                builder.setMessage("Deseja sair?");
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {

                        finish();
                        Intent i=new Intent(RealMenuActivity.this, LogoActivity.class);
                        i.putExtra("finish", true);
                        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // To clean up all activities
                        //startActivity(i);
                        startActivity( i );
                        FirebaseAuth.getInstance().signOut();



                        finish();
                        return;




                    }
                });

这是标志活动,我认为错误在这里,但我不确定

private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener firebaseAuthListener;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_logo );


        mAuth = FirebaseAuth.getInstance();

        firebaseAuthListener = new FirebaseAuth.AuthStateListener() {



            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                if (user != null) {

                    Intent it = new Intent( LogoActivity.this, RealMenuActivity.class );
                    startActivity( it );
                    finish();
                    return;
                }

            }
        };

        mEmail = (EditText) findViewById( R.id.Email );
        mPassword = (EditText) findViewById( R.id.Password );
        mbtnLogin = (ImageButton) findViewById( R.id.loginButton );

        mRegistro = (Button) findViewById( R.id.Registro );

        mRegistro.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent it = new Intent(LogoActivity.this, RegistroActivity.class);
                startActivity(it);
            }
        } );

        mbtnLogin.setOnClickListener( new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                final String Email = mEmail.getText().toString();
                final String Password = mPassword.getText().toString();
                mAuth.signInWithEmailAndPassword( Email, Password).addOnCompleteListener( LogoActivity.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()){
                            Toast.makeText( LogoActivity.this, "Erro ao Entrar. Tente novamente", Toast.LENGTH_SHORT ).show();
                        }

                    }
                } );
            }
        } );
    }

    @Override
    public void onClick(View v) {

    }

    @Override
    protected void onStart() {
        super.onStart();
        mAuth.addAuthStateListener( firebaseAuthListener );
    }

    @Override
    protected void onStop() {
        super.onStop();

        if (firebaseAuthListener != null) {
            mAuth.removeAuthStateListener(firebaseAuthListener);
            FirebaseAuth.getInstance().signOut();

        }
    }
}

它在打开徽标活动后立即崩溃!很快我将添加 logcat! 某人可以帮助我吗?提前谢谢!

Logcat

java.lang.RuntimeException:无法停止活动 {com.example.norio.amosou/com.example.norio.amosou.RealMenuActivity}:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' 在空对象引用上 在 android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4331) 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4393) 在 android.app.ActivityThread.-wrap6(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1618) 在 android.os.Handler.dispatchMessage(Handler.java:110) 在 android.os.Looper.loop(Looper.java:203) 在 android.app.ActivityThread.main(ActivityThread.java:6339) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String com.google.firebase.auth.FirebaseUser.getUid()” 在 com.example.norio.amosou.RealMenuActivity.onStop(RealMenuActivity.java:472) 在 android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1311) 在 android.app.Activity.performStop(Activity.java:6864)

【问题讨论】:

  • logcat 也会有所帮助我也没有看到 auth.signOut();
  • 发送logcat结果
  • @Emi FirebaseAuth.getInstance().signOut();?
  • 已经尝试过 FirebaseAuth.getInstance().signOut();...它仍然停止工作

标签: android firebase logout


【解决方案1】:

您的错误实际上是在您的 firebaseAuthListener 中尝试这样做 FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();。 你没有在onAuthStateChange中使用firebaseAuth

public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

}

你应该做的是这个FirebaseUser user = fireBaseAuth.getCurrecntUser()而不是这个FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

【讨论】:

    【解决方案2】:

    原因是您在 onclick 中执行 2 finish()

    @Override
                        public void onClick(DialogInterface dialog, int id) {
    
                            finish();
                            Intent i=new Intent(RealMenuActivity.this, LogoActivity.class);
                            i.putExtra("finish", true);
                            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // To clean up all activities
                            //startActivity(i);
                            startActivity( i );
                            FirebaseAuth.getInstance().signOut();
    
    
    
                            finish();
    

    只需删除第一个,因为您在访问您的意图和注销之前正在终止您的活动

    @Override
                        public void onClick(DialogInterface dialog, int id) {
    
    
                            Intent i=new Intent(RealMenuActivity.this, LogoActivity.class);
                            i.putExtra("finish", true);
                            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // To clean up all activities
                            //startActivity(i);
                            startActivity( i );
                            FirebaseAuth.getInstance().signOut();
    
    
    
                            finish();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2020-11-13
      • 2017-07-21
      • 2020-06-16
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多