Android Firebase代码未创建新用户

Android Firebase代码未创建新用户,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我的登录/注册类的代码是: package com.example.joshpc.bluetoothattendee; import android.app.ProgressDialog; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle;

我的登录/注册类的代码是:

 package com.example.joshpc.bluetoothattendee;

 import android.app.ProgressDialog;
 import android.content.Intent;
 import android.support.annotation.NonNull;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.Toast;

 import com.google.android.gms.tasks.OnCompleteListener;
 import com.google.android.gms.tasks.Task;
 import com.google.firebase.auth.AuthResult;
 import com.google.firebase.auth.FirebaseAuth;

 public class LoginActivity extends AppCompatActivity {

private EditText etEmail;
private EditText etPassword;
private EditText etRegPW;
private FirebaseAuth firebaseAuth;
private Button loginBut;
private Button regBut;
private ProgressDialog message;

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

    etEmail = (EditText) findViewById(R.id.etEmail);
    etPassword = (EditText) findViewById(R.id.etPassword);
    etRegPW = (EditText) findViewById(R.id.etRegPW);

    firebaseAuth = FirebaseAuth.getInstance();
    loginBut = (Button) findViewById(R.id.bLogin);
    regBut = (Button) findViewById(R.id.bRegister);
    message = new ProgressDialog(this);



    regBut.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            userRegister();
        }
    });

    loginBut.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            userLogin();
        }
    });

}

private void userRegister(){
    String email = etEmail.getText().toString().trim();
    String password = etPassword.getText().toString().trim();
    String verify = etRegPW.getText().toString().trim();

    if(TextUtils.isEmpty(email)){
        Toast.makeText(this, "Please enter email", Toast.LENGTH_SHORT).show();
        return;
    }
    if(TextUtils.isEmpty(password)){
        Toast.makeText(this, "Please enter password", Toast.LENGTH_SHORT).show();
        return;
    }
    Toast.makeText(this, email, Toast.LENGTH_SHORT).show();

    if(TextUtils.equals(password, verify)){
        message.setMessage("Registering User...");
        message.show();
        firebaseAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){
                            Toast.makeText(LoginActivity.this, "Successful Registration", Toast.LENGTH_SHORT).show();
                            message.hide();
                            sendData();
                        }
                        if(!task.isSuccessful()){
                            Toast.makeText(LoginActivity.this, "Failed Registration", Toast.LENGTH_SHORT).show();
                            message.hide();
                            return;
                        }
                    }
                });
    }

    else {
        Toast.makeText(this, "Passwords do not match", Toast.LENGTH_SHORT).show();
        return;
    }

}
我也在模拟器上运行这个

如果有任何内容需要编辑以便更好地解决问题,请让我知道


更新:我注册的用户帐户显示在我的firebase中,但该应用程序仍在向我抛出错误消息。

听起来你很困惑。您只需要创建用户一次。创建用户的调用也会让他/她登录。用户在设备上保持登录状态,直到注销。如果需要另一次登录,请使用
signInWithEmailAndPassword()
,而不是
createUserWithEmailAndPassword()

如果您想知道创建用户失败的原因,应显示Firebase身份验证提供给您的原因:

if(!task.isSuccessful()){
    FirebaseAuthException e = (FirebaseAuthException )task.getException();
    Toast.makeText(LoginActivity.this, "Failed Registration: "+e.getMessage(), Toast.LENGTH_SHORT).show();
    message.hide();
    return;
}
我强烈建议不要使用toasts来显示此类信息,而是(或另外)将其记录下来,以便在开发时拥有永久记录:

Log.e("LoginActivity", "Failed Registration", e);

注册新用户时,请尝试键入更长的密码。Firebase需要大于6个字符的密码


要添加到Frank的答案中,您还可以使用task中的方法在toast中显示错误消息以及常规的“注册失败”。返回字符串的task.getException()

    String s = "Sign up Failed" + task.getException();
    Toast.makeText(SignInActivity.this, s,
    Toast.LENGTH_SHORT).show();
*注意:为了清晰起见,我将显示为字符串的消息分隔开


这可能会在应用程序本身中显示错误。

您是否在Firebase项目中使用电子邮件方法启用了登录提供商

在我的情况下,我忘记启用它,因此我的例外情况如下:


D/AUTH:已为此Firebase项目禁用给定的登录提供程序。在Firebase控制台的“身份验证”部分的“登录方法”选项卡下启用它。

确保首先在Firebase身份验证中启用电子邮件。否则,您可能会出现此错误


我只是想添加,以确保您检查google play服务,以及它们是否针对您的特定apk进行了更新。今天我试着在一部旧手机上测试一个应用程序,它在一部新手机上运行良好。我不明白为什么“on failure listener”不能工作,幸运的是,我偶然发现google play服务没有更新,从而解决了这个问题

您必须在代码中检查:


检查您是否已在firebase中启用电子邮件/密码。
转到firebase站点,单击转到控制台,单击您的项目,然后单击构建,在构建下单击身份验证。然后启用电子邮件/密码。回到android studio并运行您的项目。这对我的android studio 4.1.2起到了作用。

您是否在Firebase控制台中设置了项目,并将google-services.json文件添加到了您的/app目录中?刚刚更新了帖子。我注册的帐户实际上显示在我的firebase控制台中,但应用程序仍然显示我的错误消息。当你按下注册按钮时,你能检查你的日志吗?Firebase通常会给出某种错误消息。它告诉我的是
W/DynamiteModule:com.google.Firebase.auth的本地模块描述符类找不到。
这是基于我的研究,是一个错误,根据firebase devModify您的完成侦听器代码,当任务未成功时,该错误不应影响功能。此答案的示例代码:我也有一个登录方法,但这确实是第一次创建用户。因此,当完成任务不成功时,什么是
task.getException().getMessage()
?此答案应位于顶部
    String s = "Sign up Failed" + task.getException();
    Toast.makeText(SignInActivity.this, s,
    Toast.LENGTH_SHORT).show();