当字段为空时,应用程序在登录期间崩溃



我有这个登录屏幕,我在其中输入用户名和密码以登录Firebase。当我正确输入字段(有效的用户名和通行证(时,它可以正常工作,但是,当我按"登录"并且字段不正确或为空时,应用程序就会崩溃。

我不断收到以下错误:java.lang.IllegalArgumentException: Given String is empty or null.

我尝试在给定值为空/空时使用错误处理,但没有结果。我还检查了StackOverflow是否存在该特定错误,并得到"API密钥是问题所在",这不是此问题的有效解决方案。

我的代码:

public class MainActivity extends AppCompatActivity {
private FirebaseAuth mAuth;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private TextInputLayout userNameInputLayout;
private TextInputLayout userPasswordInputLayout;
private TextInputEditText userName;
private TextInputEditText userPassword;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
userNameInputLayout = findViewById(R.id.userNameInputLayout);
userPasswordInputLayout = findViewById(R.id.userPasswordInputLayout);
userName = findViewById(R.id.userName);
userPassword = findViewById(R.id.userPassword);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
final String email = userNameInputLayout.getEditText().getText().toString().toLowerCase().trim() + "@companyaddress.com";
final String password = userPasswordInputLayout.getEditText().getText().toString().toLowerCase().trim();

mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
String uid = user.getUid();
DocumentReference userRef = db.document("users/" + uid);

userRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
final String permission = documentSnapshot.getString("permission");
if (permission.equals("user")) {
Intent sendMessage = new Intent(getApplicationContext(), userMainActivity.class);
startActivity(sendMessage);
} else {
Intent sendMessage2 = new Intent(getApplicationContext(), adminMainActivity.class);
startActivity(sendMessage2);
}
}
});

} else {
Toast.makeText(getApplicationContext(), "Wrong username or password", Toast.LENGTH_LONG);
}
}
});
}
});
}

用于用户名输入的 XML 文件的一部分:

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/userNameInputLayout"
android:focusable="false" android:focusableInTouchMode="true"
android:backgroundTint="#2D77B6"
android:textColorHint="#3281C5"
android:textColor="#2D77B6"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:hint="Username"
android:textColorHint="#3281C5"
android:textColor="#2D77B6"
android:backgroundTint="#2D77B6"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>

使用当前代码时,当用户按下登录按钮时,代码会获取两个字段并将其存储在两个变量(电子邮件和密码onClickListener(中,并且您还调用signInWithEmailAndPasswordFirebase 函数,该函数接收两个字符串(电子邮件和密码(,但可能尚未分配提供的值。

更改代码的这一部分:

button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
final String email = userNameInputLayout.getEditText().getText().toString().toLowerCase().trim() + "@companyaddress.com";
final String password = userPasswordInputLayout.getEditText().getText().toString().toLowerCase().trim();

mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new 
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
String uid = user.getUid();
DocumentReference userRef = db.document("users/" + uid);

userRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
final String permission = documentSnapshot.getString("permission");
if (permission.equals("user")) {
Intent sendMessage = new Intent(getApplicationContext(), userMainActivity.class);
startActivity(sendMessage);
} else {
Intent sendMessage2 = new Intent(getApplicationContext(), adminMainActivity.class);
startActivity(sendMessage2);
}
}
});

} else {
Toast.makeText(getApplicationContext(), "Wrong username or password", Toast.LENGTH_LONG);
}
}
});
}
});

对此:

button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
final String email = userNameInputLayout.getEditText().getText().toString().toLowerCase().trim() + "@companyaddress.com";
final String password = userPasswordInputLayout.getEditText().getText().toString().toLowerCase().trim();
loginWithEmailAndPassword(email, password);
}
private void loginWithEmailAndPassword(email, password){
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new 
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
String uid = user.getUid();
DocumentReference userRef = db.document("users/" + uid);

userRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
final String permission = documentSnapshot.getString("permission");
if (permission.equals("user")) {
Intent sendMessage = new Intent(getApplicationContext(), userMainActivity.class);
startActivity(sendMessage);
} else {
Intent sendMessage2 = new Intent(getApplicationContext(), adminMainActivity.class);
startActivity(sendMessage2);
}
}
});

} else {
Toast.makeText(getApplicationContext(), "Wrong username or password", Toast.LENGTH_LONG);
}
}
});
}
});

最新更新