Firebase身份验证android.view.view$OnClickListener错误消息
我正在尝试使用Firebase对用户进行身份验证。我试图使用Firebase,只是将其更改为我已经创建的版本,但我不断出错。我在SO上看到了几个示例和问题解决方案,它们帮助我解决了几个问题,但我仍然被卡住。我最近遇到的错误是:Firebase身份验证android.view.view$OnClickListener错误消息,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我正在尝试使用Firebase对用户进行身份验证。我试图使用Firebase,只是将其更改为我已经创建的版本,但我不断出错。我在SO上看到了几个示例和问题解决方案,它们帮助我解决了几个问题,但我仍然被卡住。我最近遇到的错误是: Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
W/System: ClassLoader referenced unknown path: /data/app/com.example.myproject-2/lib/arm
V/FA: Registered activity lifecycle callback
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
I/FirebaseInitProvider: FirebaseApp initialization successful
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation
I/art: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$OnUnhandledKeyEventListenerWrapper>
Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$OnUnhandledKeyEventListenerWrapper>
V/FA: Collection enabled
App package, google app id: com.example.myproject, 1:1068609878538:android:9b5be5dc4e43735d9f7df3
I/FA: App measurement is starting up, version: 18202
To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
To enable faster debug mode event logging run:
adb shell setprop debug.firebase.analytics.app com.example.myproject
D/FA: Debug-level message logging enabled
V/BoostFramework: mAcquireFunc method = public int com.qualcomm.qti.Performance.perfLockAcquire(int,int[])
mReleaseFunc method = public int com.qualcomm.qti.Performance.perfLockRelease()
mAcquireTouchFunc method = public int com.qualcomm.qti.Performance.perfLockAcquireTouch(android.view.MotionEvent,android.util.DisplayMetrics,int,int[])
mIOPStart method = public int com.qualcomm.qti.Performance.perfIOPrefetchStart(int,java.lang.String)
mIOPStop method = public int com.qualcomm.qti.Performance.perfIOPrefetchStop()
V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@4a7b963
BoostFramework() : mPerf = com.qualcomm.qti.Performance@b784960
V/FA: Connecting to remote service
V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@98e1aea
D/MainActivity: onCreate: starting.
D/MainActivity: setupBottomNavigationView: setting up bottom navigation view
D/BottomNavigationViewHel: setupBottomNavigationView: Setting up bottom navigation view.
D/MainActivity: onStart: Starting MainActivity onStart method.
updateUI: checking if user is logged in.
D/MainActivity: onStart:signed_out.
V/FA: Activity resumed, time: 6079852
I/FA: Tag Manager is not found and thus will not be used
D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
D/FA: Logging event (FE): screen_view(_vs), Bundle[{ga_event_origin(_o)=auto, ga_screen_class(_sc)=MainActivity, ga_screen_id(_si)=-2493293364558908427}]
V/FA: Connection attempt already in progress
Connection attempt already in progress
Screen exposed for less than 1000 ms. Event not sent. time: 77
V/FA: Connection attempt already in progress
Activity paused, time: 6079882
D/EmailPassword: onCreate: started.
V/FA: onActivityCreated
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myproject, PID: 23204
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myproject/com.example.myproject.Login.LoginActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
从应用程序捕获和显示logcat消息。可以在“调试器”设置页面的“Logcat输出”部分禁用此行为。
W/System:ClassLoader引用了未知路径:/data/app/com.example.myproject-2/lib/arm
V/FA:已注册的活动生命周期回调
W/DynamicModule:未找到com.google.firebase.auth的本地模块描述符类。
I/FirebaseInitProvider:FirebaseApp初始化成功
W/DynamicModule:未找到com.google.firebase.auth的本地模块描述符类。
W/art:Android 4.1之前的方法Android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.UpdatentFilter(Android.graphics.PorterDuffColorFilter,Android.content.res.ColorStateList,Android.graphics.PorterDuff$模式)将错误地重写android.graphics.drawable.drawable中的包私有方法
I/FirebaseAuth:[FirebaseAuth:]准备创建到gms实现的服务连接
I/art:拒绝在以前失败的类java.lang.class上重新初始化
拒绝在以前失败的类java.lang.class上重新初始化
V/FA:已启用收集
应用程序包,谷歌应用程序id:com.example.myproject,1:1068609878538:android:9b5be5dc4e43735d9f7df3
I/FA:应用程序测量正在启动,版本:18202
要启用调试日志记录,请运行:adb shell setprop log.tag.FA VERBOSE
要启用更快的调试模式事件日志记录,请运行:
adb shell setprop debug.firebase.analytics.app com.example.myproject
D/FA:已启用调试级别消息日志记录
V/BoostFramework:mAcquireFunc method=public int com.qualcomm.qti.Performance.perfLockAcquire(int,int[])
mReleaseFunc method=public int com.qualcomm.qti.Performance.perfLockRelease()
mAcquireTouchFunc method=public int com.qualcomm.qti.Performance.perfLockAcquireTouch(android.view.MotionEvent,android.util.DisplayMetrics,int,int[])
mIOPStart method=public int com.qualcomm.qti.Performance.perfIOPrefetchStart(int,java.lang.String)
mIOPStop method=public int com.qualcomm.qti.Performance.perfioprefetchtstop()
V/BoostFramework:BoostFramework():mPerf=com.qualcomm.qti。Performance@4a7b963
BoostFramework():mPerf=com.qualcomm.qti。Performance@b784960
V/FA:连接到远程服务
V/BoostFramework:BoostFramework():mPerf=com.qualcomm.qti。Performance@98e1aea
D/main活动:onCreate:正在启动。
D/main活动:设置底部导航视图:设置底部导航视图
D/BottomNavigationViewHel:setupBottomNavigationView:设置底部导航视图。
D/MainActivity:onStart:启动MainActivity onStart方法。
updateUI:检查用户是否已登录。
D/main活动:启动:注销。
V/FA:活动已恢复,时间:6079852
I/FA:找不到标签管理器,因此不会使用
D/OpenGLRenderer:使用EGL\u交换\u行为\u保留:true
D/FA:日志事件(FE):屏幕视图(_-vs),捆绑[{ga_-event_-origin(_-o)=auto,ga_-screen_-class(_-sc)=MainActivity,ga_-screen_-id(_-si)=-2493293364558908427}]
V/FA:连接尝试已在进行中
连接尝试已在进行中
屏幕暴露时间小于1000毫秒。事件未发送。时间:77
V/FA:连接尝试已在进行中
活动已暂停,时间:6079882
D/EmailPassword:onCreate:已启动。
V/FA:onActivityCreated
D/AndroidRuntime:关闭虚拟机
E/AndroidRuntime:致命异常:主
进程:com.example.myproject,PID:23204
java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.myproject/com.example.myproject.Login.LoginActivity}:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法'void android.view.view.setOnClickListener(android.view.view$OnClickListener)'
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)上
这是我的密码:
public class LoginActivity extends Activity implements View.OnClickListener {
private static final String TAG = "EmailPassword";
private TextView mStatusTextView;
private TextView mDetailTextView;
private EditText mEmailField;
private EditText mPasswordField;
private FirebaseAuth mAuth;
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate: started.");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// Views
mEmailField = findViewById(R.id.input_email);
mPasswordField = findViewById(R.id.input_password);
// Buttons
findViewById(R.id.btn_login).setOnClickListener((View.OnClickListener) this);
findViewById(R.id.btn_register).setOnClickListener((View.OnClickListener) this);
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
signOut();
}
@Override
public void onStart() {
Log.d(TAG, "onStart: started.");
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
updateUI(currentUser);
}
private void createAccount(String email, String password) {
Log.d(TAG, "createAccount:" + email);
if (!validateForm()) {
return;
}
mAuth.createUserWithEmailAndPassword(email, password)
.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(TAG, "createUserWithEmail:success");
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "createUserWithEmail:failure", task.getException());
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
updateUI(null);
}
}
});
}
private void signIn(String email, String password) {
Log.d(TAG, "signIn:" + email);
if (!validateForm()) {
return;
}
mAuth.signInWithEmailAndPassword(email, password)
.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(TAG, "signInWithEmail:success");
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithEmail:failure", task.getException());
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
updateUI(null);
}
if (!task.isSuccessful()) {
mStatusTextView.setText(R.string.auth_failed);
}
}
});
}
private void signOut() {
Log.d(TAG, "signOut: started.");
mAuth.signOut();
updateUI(null);
}
private boolean validateForm() {
Log.d(TAG, "validateForm: started.");
boolean valid = true;
String email = mEmailField.getText().toString();
if (TextUtils.isEmpty(email)) {
mEmailField.setError("Required.");
valid = false;
} else {
mEmailField.setError(null);
}
String password = mPasswordField.getText().toString();
if (TextUtils.isEmpty(password)) {
mPasswordField.setError("Required.");
valid = false;
} else {
mPasswordField.setError(null);
}
return valid;
}
private void updateUI(FirebaseUser user) {
Log.d(TAG, "updateUI: started.");
if (user != null) {
mStatusTextView.setText(getString(R.string.emailpassword_status_fmt, user.getEmail(), user.isEmailVerified()));
mDetailTextView.setText(getString(R.string.firebase_status_fmt, user.getUid()));
} else {
findViewById(R.id.btn_login).setVisibility(View.VISIBLE);
findViewById(R.id.pleaseWait).setVisibility(View.GONE);
findViewById(R.id.progressBar).setVisibility(View.GONE);
}
}
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: started.");
findViewById(R.id.btn_login).setOnClickListener((View.OnClickListener) this);
findViewById(R.id.btn_register).setOnClickListener((View.OnClickListener) this);
int i = view.getId();
if (i == R.id.btn_register) {
createAccount(mEmailField.getText().toString(), mPasswordField.getText().toString());
} else if (i == R.id.btn_login) {
signIn(mEmailField.getText().toString(), mPasswordField.getText().toString());
}
}
}
公共类LoginActivity扩展活动实现View.OnClickListener{
私有静态最终字符串TAG=“EmailPassword”;
私有文本视图mStatusTextView;
私有文本视图mDetailTextView;
私有编辑文本mEmailField;
私有编辑文本mPasswordField;
私人消防队;
@凌驾
创建时的公共void(Bundle savedInstanceState){
d(标记“onCreate:started”);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
//观点
mEmailField=findviewbyd(R.id.input\u email);
mPasswordField=findviewbyd(R.id.input\u密码);
//钮扣
findviewbyd(R.id.btn_login).setOnClickListener((View.OnClickListener)this);
findviewbyd(R.id.btn_寄存器).setOnClickListener((View.OnClickListener)this);
//初始化Firebase身份验证
mAuth=FirebaseAuth.getInstance();
签出();
}
@凌驾
public void onStart(){
Log.d(标记“onStart:started”);
super.onStart();
//检查用户是否已登录(非空),并相应地更新用户界面。
FirebaseUser currentUser=mAuth.getCurrentUser();
updateUI(当前用户);
}
私有void createAccount(字符串电子邮件、字符串密码){
Log.d(标记“createAccount:”+电子邮件);
如果(!validateForm()){
返回;
}
mAuth.createUserWithEmailAndPassword(电子邮件,密码)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//登录成功,使用登录用户的信息更新UI
Button loginBtn;
public void onCreate(Bundle savedInstanceState) {
.......
loginBtn = findViewById(R.id.btn_login);
.......
}
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do your stuff
}
});
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: started.");
//Remove the extra call to attach the listener
int i = view.getId();
if (i == R.id.btn_register) {
createAccount(mEmailField.getText().toString(), mPasswordField.getText().toString());
} else if (i == R.id.btn_login) {
signIn(mEmailField.getText().toString(), mPasswordField.getText().toString());
}
}