Wonder Почему не удается запустить mAuth.signInWithEmailAndPassword()
внутри моей кнопки onClick()
, как я это делал раньше. Должен ли я назвать это по-другому? но как это не так много информации о новой версии.Firebase 9.0.0 mAuth.signInWithEmailAndPassword, как передать его кнопке
В настоящее время он дает быть строка ошибки пуста или нуль:
процесса: com.example.rasmusjosefsson.rjcar, PID: 30563 java.lang.RuntimeException: Невозможно начать деятельность ComponentInfo {ком .example.rasmusjosefsson.rjcar/com.example.rasmusjosefsson.rjcar.LoginAndSignUp.LoginActivity}: java.lang.IllegalArgumentException: данная строка пуста или нуль в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2416) по адресу android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) на java .lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Вызвано: java.lang.IllegalArgumentException: данная строка пуста или null на com.google.android.gms.common.internal. zzaa.zzdl (Unknown Source) на com.google.firebase.auth.FirebaseAuth.signInWithEmailAndPassword (Неизвестный источник) на com.example.rasmusjosefsson.rjcar.LoginAndSignUp.LoginActivity.onCreate (LoginActivity.java:77) на android.app.Activity.performCreate (Activity.java:6237) на android.app.Instrumentation.callActivityOnCreate (Instrum entation.java:1107) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2369) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:148)
Я предполагаю, что это из-за mAuth.signInWithEmailAndPassword(email, password)
без какой-либо инициированной строки. и поэтому будет называться сразу внутри onCreate()
.
public class LoginActivity extends AppCompatActivity {
protected EditText emailEditText;
protected EditText passwordEditText;
protected Button loginButton;
protected TextView signUpTextView;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
// Currently
private String email;
private String password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// Setting up the Views
signUpTextView = (TextView) findViewById(R.id.signUpText);
emailEditText = (EditText) findViewById(R.id.emailField);
passwordEditText = (EditText) findViewById(R.id.passwordField);
loginButton = (Button) findViewById(R.id.loginButton);
// Getting the firebase reference url
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
mAuth = FirebaseAuth.getInstance();
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Reterives user inputs
email = emailEditText.getText().toString();
password = passwordEditText.getText().toString();
// trims the input
email = email.trim();
password = password.trim();
}
});
// When a user signs in to your app, pass the user's email address and password to signInWithEmailAndPassword
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d("TAG", "signInWithEmail:onComplete:" + task.isSuccessful());
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Log.w("TAG", "signInWithEmail", task.getException());
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
// responds to changes in the user's sign-in state
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());
// Authenticated successfully with authData
Intent intent = new Intent(LoginActivity.this, MainRealBack2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
} else {
// User is signed out
Log.d("TAG", "onAuthStateChanged:signed_out");
}
}
};
}
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
}
Моя активность:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainrealback2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// User is signed in
mUserId = user.getUid();
} else {
// No user is signed in
loadLoginView();
}
waypointsUrl = Constants.FIREBASE_URL + "https://stackoverflow.com/users/" + mUserId + "/waypoints";
mainRef = FirebaseDatabase.getInstance().getReferenceFromUrl(waypointsUrl);
UPDATE
Любые причины, почему это делается? – tenki
@Rasmus Просто сомневаюсь. Incase LoginActivity должен возвращать результат с помощью setResult() в свою родительскую активность, как я могу сделать это в методе onComplete? Я пробовал все возможные способы, но setResult не смог вызвать onActivityResult своего родителя. – Tamil