Firebase身份验证:signInWithEmailAndPassword方法根本不响应

时间:2017-10-20 08:02:48

标签: java android firebase-authentication

我通过Android应用程序在firebase中的身份验证中遇到问题。一切都很好的代码和连接。但我仍然没有通过身份验证。我已经完成了所有必需品,如

  • 已启用firebase中的电子邮件/密码登录方法
  • 在build.gradle
  • 中添加了所有必需的依赖项
  • 检查将规则(用户)更改为null和!空。
  • 连接成功完成

问题出在signInWithEmialAndPassword方法内部,if和else语句都没有执行。为什么会这样?我搜索了很多但都是徒劳的。我使用仿真器NEXUS 5X API 26而不是实际设备。 这是代码..

package com.example.abid.fireauthapp;
import java.net.PasswordAuthentication;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    // ..
    private EditText mEmailField;
    private EditText mPasswordField;
    private Button mLoginButton;
    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthListener;
   // private DatabaseReference rootRef;


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

        mEmailField = (EditText) findViewById(R.id.emailField);
        mPasswordField = (EditText) findViewById(R.id.passwordField);
        mLoginButton = (Button) findViewById(R.id.loginButton);
        mAuth = FirebaseAuth.getInstance();



        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in
                    Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());

                    //show a welcome messgage and start a new activity
                    Toast.makeText(MainActivity.this, "Welcome", Toast.LENGTH_LONG).show();
                    startActivity(new Intent(MainActivity.this,Main2Activity.class));

                } else {
                    // User is signed out
                    Log.d(TAG, "onAuthStateChanged:signed_out");
                }
                // ...
            }
        };
        mLoginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                StartSignIn();

            }
        });
    }
    @Override
    public void onStart() {
        super.onStart();
        if (mAuthListener == null) {
            mAuth.addAuthStateListener(mAuthListener);
        }
    }
    @Override
    public void onStop() {
        super.onStop();
        if (mAuthListener != null) {
            mAuth.removeAuthStateListener(mAuthListener);
        }
    }


    private void StartSignIn() {
        String email = mEmailField.getText().toString();
        String pass = mPasswordField.getText().toString();
        if (TextUtils.isEmpty(email) || TextUtils.isEmpty(pass)){
            Toast.makeText(MainActivity.this, "Fields are empty...", Toast.LENGTH_LONG).show();
        }
        else {
            mAuth.signInWithEmailAndPassword(email, pass)
                    .addOnCompleteListener(this,new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task task) {
                            Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful());
                            FirebaseUser user = mAuth.getCurrentUser();

                            Toast.makeText(MainActivity.this, "You are sign in..", Toast.LENGTH_LONG).show();
                            startActivity(new Intent(MainActivity.this,Main2Activity.class));

                            //These Both if and else statement dont get executed... Why ??

                            if (user == null) {
                                Log.w(TAG, "signInWithEmail:failed", task.getException());
                                Toast.makeText(MainActivity.this, "Error Occured",
                                        Toast.LENGTH_SHORT).show();
                            }else{
                                Toast.makeText(MainActivity.this, "Signed In successfully..", Toast.LENGTH_LONG).show();
                            }

                            // ...
                        }
                    });
        }


    }
}

1 个答案:

答案 0 :(得分:0)

像这样更改您的代码。

...
public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithEmail:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        Toast.makeText(MainActivity.this, "You are sign in..", Toast.LENGTH_LONG).show();
                        startActivity(new Intent(MainActivity.this,Main2Activity.class));
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithEmail:failure", task.getException());
                        Toast.makeText(MainActivity, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }


                }

会发生什么?