0

我遵循API文檔設置用戶身份驗證。我的registerActivity正確地將數據發送到Firebase數據庫,但是當我嘗試爲我的loginActivity設置登錄身份驗證時,登錄按鈕不會像我期望的那樣轉到mainActivity。我的用戶登錄設置有問題嗎?或者有另一種方法我應該使用登錄按鈕的意圖?Android Studio Firebase身份驗證(修正Google服務版本)

public class LoginActivity extends AppCompatActivity { 

private EditText emailField; 
private EditText passwordField; 

private Button loginButton; 

private FirebaseAuth loginAuth; 
private FirebaseAuth.AuthStateListener loginAuthListener; 

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

    loginAuth = FirebaseAuth.getInstance(); 

    emailField = (EditText) findViewById(R.id.emailField); 
    passwordField = (EditText) findViewById(R.id.passwordField); 
    loginButton = (Button) findViewById(R.id.loginButton); 

    final TextView RegisterLink = (TextView) findViewById(R.id.registerLink); 

    loginAuthListener = new FirebaseAuth.AuthStateListener(){ 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){ 
      if(firebaseAuth.getCurrentUser() != null){ 
       startActivity(new Intent(LoginActivity.this, MainActivity.class)); 
      } 
     } 
    }; 

    RegisterLink.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class); 
      LoginActivity.this.startActivity(registerIntent); 
     } 
    }); 

    loginButton.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view){ 
      startSignIn(); 
     } 
    }); 
} 

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

    loginAuth.addAuthStateListener(loginAuthListener); 
} 



private void startSignIn(){ 
    String email = emailField.getText().toString(); 
    String password = passwordField.getText().toString(); 

    if(TextUtils.isEmpty(email) || TextUtils.isEmpty(password)){ 
     if(TextUtils.isEmpty(email)){ 
      Toast.makeText(LoginActivity.this, "Email Field is Empty", Toast.LENGTH_LONG).show(); 

     }else if(TextUtils.isEmpty(password)){ 
      Toast.makeText(LoginActivity.this, "Password Field is Empty", Toast.LENGTH_LONG).show(); 

     } else{ 
      Toast.makeText(LoginActivity.this, "Email Field and Password Field are Empty", Toast.LENGTH_LONG).show(); 
     } 


    } else { 

     loginAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       if(!task.isSuccessful()){ 
        Toast.makeText(LoginActivity.this,"Either the Password or Email Field is Incorrect. Please Try Again.", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
    } 

} 

}

回答

0

我看着日誌控制檯同時運行的應用程序,發現谷歌的服務版本的模擬器是對是不是最新的運行。爲了解決這個問題,你可以...

  • 運行一個真正的Android設備
  • 上的應用程序確保您使用的所有依賴相同版本(均爲9.8,均爲10.0。 0等)
  • 一定要點擊Android工具列表中的「同步項目與gradle文件」