FireBase 身份验证登录/注册异常
Posted
技术标签:
【中文标题】FireBase 身份验证登录/注册异常【英文标题】:FireBase Authentication login/register Exception 【发布时间】:2018-06-19 03:35:58 【问题描述】:大家好,我在使用 FireBase 创建用户和注册用户时遇到问题。下面是注册和登录的代码。我得到 nullPointer Exception 并且无法理解为什么.. 进行了初始化但尝试了这么多天却无法弄清楚。
注册:
public class RegisterActivity extends Activity
private EditText mDisName;
private EditText mMail;
private EditText mPass;
private Button reg;
private TextView error;
private FirebaseAuth regAuth;
private ProgressBar myprog;
private int Progress =0;
private Handler myHandler= new Handler();
private DatabaseReference databaseRef;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
mDisName =(EditText) findViewById(R.id.reg_name);
mMail = (EditText) findViewById(R.id.reg_mail);
mPass = (EditText) findViewById(R.id.reg_password);
reg = (Button) findViewById(R.id.reg_button);
error = (TextView) findViewById(R.id.textView4);
myprog = (ProgressBar) findViewById(R.id.progressbar);
regAuth = FirebaseAuth.getInstance();
databaseRef = FirebaseDatabase.getInstance().getReference().child("UserNames :");
reg.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
String disName = mDisName.getText().toString();
String dmail = mMail.getText().toString();
String pass = mPass.getText().toString();
new Thread(new Runnable()
@Override
public void run()
while(Progress < 100)
Progress++;
android.os.SystemClock.sleep(30);
myHandler.post(new Runnable()
@Override
public void run()
myprog.setProgress(Progress);
);
).start();
registerUser(disName,dmail,pass);
);
public void registerUser(final String displayName,String email, String password)
databaseRef.push().setValue(displayName);
-->Error line <-- regAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
@Override
public void onComplete(@NonNull Task<AuthResult> task)
if (task.isSuccessful())
Intent loginIntent = new Intent(RegisterActivity.this, login.class);
startActivity(loginIntent);
Spannable errormes = new SpannableString("\"Registration Successful As User :\"" + displayName);
errormes.setSpan(new ForegroundColorSpan(Color.GREEN), 0, errormes.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
error.setText(errormes);
//finish();
else
Toast.makeText(RegisterActivity.this, "Error with registration!", Toast.LENGTH_LONG).show();
error.setText(" Error 110! User already exists! \n Please provide different username!");
try
throw task.getException();
catch (FirebaseAuthWeakPasswordException e)
Log.e("Exception", e.getMessage());
catch (FirebaseAuthInvalidCredentialsException e)
Log.e("Exception", e.getMessage());
catch (FirebaseAuthUserCollisionException e)
Log.e("Exception", e.getMessage());
catch (Exception e)
Log.e("Exception", e.getMessage());
);
发布注册活动的日志错误:
java.lang.NullPointerException 在 com.google.android.gms.internal.zzdvv.zzb(未知来源) 在 com.google.android.gms.internal.zzdwc.zza(未知来源) 在 com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(未知 资源) 在 com.package.myapp.RegisterActivity.registerUser(RegisterActivity.java:88) 在 com.package.myapp.RegisterActivity$1.onClick(RegisterActivity.java:79) 在 android.view.View.performClick(View.java:4438) 在 android.view.View$PerformClick.run(View.java:18422) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 在 dalvik.system.NativeStart.main(Native Method)
登录也会发生同样的事情(注册用户后,使用网站上的 firebase plus 按钮)
登录活动示例代码:
java.lang.IllegalStateException:无法执行的方法 活动 在 android.view.View$1.onClick(View.java:3823) 在 android.view.View.performClick(View.java:4438) 在 android.view.View$PerformClick.run(View.java:18422) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 android.view.View$1.onClick(View.java:3818) 在 android.view.View.performClick(View.java:4438) 在 android.view.View$PerformClick.run(View.java:18422) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException 在 com.google.android.gms.internal.zzdvv.zzb(未知来源) 在 com.google.android.gms.internal.zzdwc.zzb(未知来源) 在 com.google.firebase.auth.FirebaseAuth.signInWithEmailAndPassword(未知 资源) 在 com.package.myapp.login.login(login.java:143)
下面还提供了登录java类:
public class login extends Activity
private EditText user;
private EditText password;
private TextView registerView;
private TextView loginView;
private Spannable errormes;
private FirebaseAuth mAuth;
private Button login;
private CallbackManager callbackManager ;
private ImageView loginIma;
private ImageView image;
private ImageView image2;
private CardView cardView;
private GoogleSignInOptions gso;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
user = (EditText) findViewById(R.id.username);
image=(ImageView)findViewById(R.id.imageView4);
image2=(ImageView)findViewById(R.id.imageView3);
errormes = new SpannableString("Error 100! User doesnt exists! \n Please register first");
userdatabase = FirebaseDatabase.getInstance().getReference().child("Users :");
mAuth = FirebaseAuth.getInstance();
registerView = (TextView) findViewById(R.id.registerView);
password = (EditText)findViewById(R.id.passwordView);
callbackManager = CallbackManager.Factory.create();
boolean loggedIn = AccessToken.getCurrentAccessToken() == null;
cardView=(CardView)findViewById(R.id.cardView);
loginView = (TextView) findViewById(R.id.loginView);
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>()
@Override
public void onSuccess(LoginResult loginResult)
Intent account = new Intent(login.this,menu_activity.class);
startActivity(account);
@Override
public void onCancel()
Intent main = new Intent(login.this,login.class);
startActivity(main);
finish();
@Override
public void onError(FacebookException exception)
Toast.makeText(login.this, "Error 500! Facebook login failed!", Toast.LENGTH_SHORT).show();
);
private int size = 0;
private HashMap<String, String> users = new HashMap<String, String>();
private DatabaseReference userdatabase;
private FirebaseAuth.AuthStateListener mAuthListener;
public void setSize(int newsize)
this.size = newsize;
public void login(View view)
EditText user = (EditText) findViewById(R.id.username);
EditText password = (EditText) findViewById(R.id.passwordView);
Spannable errormes = new SpannableString("Error 100! User doesnt exists! \n Please register first");
errormes.setSpan(new ForegroundColorSpan(Color.RED), 0, errormes.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Intent userAcc = new Intent(login.this,menu_activity.class);
startActivity(userAcc);
**//error line** mAuth.signInWithEmailAndPassword(user.getText().toString(), password.getText().toString())
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
@Override
public void onComplete(@NonNull Task<AuthResult> task)
if (task.isSuccessful())
// Sign in success, update UI with the signed-in user's information
Log.d("Loged on!", "signInWithEmail:success");
Toast.makeText(login.this, "Loged On!.", Toast.LENGTH_SHORT).show();
Intent userAcc = new Intent(login.this,menu_activity.class);
startActivity(userAcc);
else
// If sign in fails, display a message to the user.
Log.w("Login Failed!", "signInWithEmail:failure", task.getException());
Toast.makeText(login.this, "Authentication failed.", Toast.LENGTH_SHORT).show();
// ...
);
如果有人能提供帮助,我会很高兴。提前致谢!
【问题讨论】:
您是否检查过您传递给注册和登录的参数? 在应用程序初始化此警告时查看 logcat:W/GooglePlayServicesUtil: Google Play services out of date
。设备或模拟器必须安装支持构建应用的 Firebase SDK 版本的 Play 服务版本。
Benjith binja 感谢您的新编辑! @BobSnyder 会看看这个
@BobSnyder 是的,非常感谢你
【参考方案1】:
感谢@BobSnyder,问题出在 api 上。您必须安装带有 (Google API) 插件的 API。
【讨论】:
以上是关于FireBase 身份验证登录/注册异常的主要内容,如果未能解决你的问题,请参考以下文章
该电子邮件地址已被另一个帐户使用(使用电子邮件/密码 Firebase 进行身份验证)