android - 使用firebase的Android Studio登录不起作用
问题描述
我的应用在文本字段中显示错误,但 Android Studio 向我显示一切都是正确的。代码:
package com.vrobinde.reminder;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
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 LoginPage extends AppCompatActivity {
EditText loginEmail, loginPassword;
TextView cAcc;
Button loginButton;
FirebaseAuth fireAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loginpage);
loginEmail = findViewById(R.id.emailAdressLogin);
loginPassword = findViewById(R.id.passwordLogin);
loginButton = findViewById(R.id.loginButton);
cAcc = findViewById(R.id.noAccRegLink);
fireAuth = FirebaseAuth.getInstance();
Toolbar toolbar = findViewById(R.id.toolbarlogin);
setSupportActionBar(toolbar);
if(fireAuth.getCurrentUser() != null) {
startActivity(new Intent(getApplicationContext(), MainActivity.class));
finish();
}
loginButton.setOnClickListener(new View.OnClickListener() {
String email = loginEmail.getText().toString().trim();
String password = loginPassword.getText().toString().trim();
@Override
public void onClick(View view) {
if(TextUtils.isEmpty(email)) {
loginEmail.setError("Email Address is required!");
return;
}
if(TextUtils.isEmpty(password)) {
loginPassword.setError("Password is required!");
return;
}
fireAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()) {
Toast.makeText(LoginPage.this, "Login successfully", Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(), MainActivity.class));
} else {
Toast.makeText(LoginPage.this, "An error occurred!" + task.getException(), Toast.LENGTH_SHORT).show();
}
}
});
}
});
cAcc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(getApplicationContext(), RegisterPage.class));
}
});
}
}
我的错误还是Android Studio?我在注册页面中使用了几乎相同的代码,并且那里一切正常。
唯一的区别是,我的注册类中的字符串名称是白色的,而登录类中的字符串名称是紫色的。
我在调试控制台中没有堆栈跟踪。
解决方案
将这些行放在 onClick() 方法中,而不是直接放在 setOnClickListener 下。
String email = loginEmail.getText().toString().trim();
String password = loginPassword.getText().toString().trim();
最好在类下直接声明字符串电子邮件和字符串密码(作为实例变量)。
推荐阅读
- python - 如何使用 Music21 检索钢琴曲的左右手
- javascript - 在表格上动态附加按钮时,无法添加onclick确认事件
- android - 如何在 TextInput 上打开没有键盘 onLongPress 的上下文菜单(React Native)
- javascript - 在敲除数组中搜索重复条目
- angular - 哪个组件是正确的
- keras - 当我打乱我的数据时,keras 的 fit 和 fit_generator 仍然不同
- android - 如果方向改变,我如何改变可绘制的半径?
- python - Tensorflow 对象检测 API AvgNumGroundtruthBoxesPerImage 始终为零(未显示地面实况标签)
- mongodb - 使用 mongodb 查询访问 [{ }] 内的字段
- php - 如何在 laravel 5.0 中测试上传文件?