我的登录/注册类的代码是:
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;
}
}
每当我运行这部分代码时,它最终会显示我的“注册失败”的Toast消息,我不知道为什么。我已经测试了电子邮件,密码的值以及使用toast消息进行验证,以确保它们正确传递。我已经检查了firebase建议的代码,以便在android上验证用户身份。
我的gradle构建文件是:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
useLibrary 'org.apache.http.legacy'
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
}
defaultConfig {
applicationId "com.example.joshpc.bluetoothattendee"
minSdkVersion 19
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled true
debug{debuggable = true}
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.google.android.gms:play-services-gcm:9.6.1'
compile 'com.google.firebase:firebase-auth:9.6.1'
compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-database:9.6.1'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
我也在模拟器上运行它。
如果有任何需要编辑的内容以便更好地解决问题,请告诉我。
更新:我在我的firebase中注册的用户帐户显示在我的firebase中,但该应用程序仍在向我发送错误消息。
答案 0 :(得分:8)
如果您想知道为什么创建用户失败,您应该显示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);
答案 1 :(得分:5)
尝试在注册新用户时输入更长的密码。 Firebase需要一个包含&gt; 6个字符的密码。
答案 2 :(得分:1)
听起来你createUserWithEmailAndPassword()和signInWithEmailAndPassword()混淆了。您只需要创建一次用户。创建用户的呼叫也会签署他/她。用户保持登录设备直到退出。如果需要其他登录,请使用signInWithEmailAndPassword()
,而不是createUserWithEmailAndPassword()
。
答案 3 :(得分:0)
要添加到Frank的答案中,您还可以显示错误消息以及常规&#34;失败的注册&#34;在toast中使用任务中的方法。 task.getException()返回一个String。
String s = "Sign up Failed" + task.getException();
Toast.makeText(SignInActivity.this, s,
Toast.LENGTH_SHORT).show();
*注意为了清楚起见,我将显示为字符串的消息分开。
这可以在应用程序本身中显示错误。
答案 4 :(得分:0)
您是否已在Firebase项目中使用电子邮件方法启用了登录提供程序?
就我而言,我忘记启用它,所以我的例外是这样的:
D/AUTH: The given sign-in provider is disabled for this Firebase project. Enable it in the Firebase console, under the sign-in method tab of the Auth section.
答案 5 :(得分:0)
答案 6 :(得分:0)
我只是想补充一点,以确保您检查了Google Play服务以及它们是否针对您的特定APK更新。今天,我尝试在较旧的手机上测试一个应用程序,然后在较新的手机上运行良好。我不知道为什么“失败监听器”无法正常工作,但幸运的是,我偶然发现Google Play服务没有更新,从而解决了问题。
您必须在代码中进行检查:
答案 7 :(得分:0)
检查您是否在 firebase 中启用了电子邮件/密码。 转到 firebase 站点,单击转到控制台,单击您的项目,然后单击构建并在构建下单击身份验证。然后启用电子邮件/密码。返回 android studio 并运行您的项目。这对我 android studio 4.1.2 有用。