Java Android应用程序崩溃,而不是显示Toast和抛出IllegalArgumentException
我制作了一个具有登录功能的简单应用程序。如果Java Android应用程序崩溃,而不是显示Toast和抛出IllegalArgumentException,java,android,firebase,firebase-authentication,Java,Android,Firebase,Firebase Authentication,我制作了一个具有登录功能的简单应用程序。如果EditText(s)为空,它将崩溃并抛出IllegalArgumentException。我使用Firebase身份验证。我尝试使用assert,但仍然不起作用 复制问题的虚拟凭据: 电子邮件:abc@abc.com 密码:123456 StartActivity.java import android.app.ProgressDialog; import android.os.Bundle; import androidx.appcompat.a
EditText
(s)为空,它将崩溃并抛出IllegalArgumentException
。我使用Firebase身份验证。我尝试使用assert
,但仍然不起作用
复制问题的虚拟凭据:
电子邮件:abc@abc.com
密码:123456
StartActivity.java
import android.app.ProgressDialog;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import android.content.Intent;
import android.app.Activity;
import android.content.SharedPreferences;
import java.util.Objects;
public class StartActivity extends AppCompatActivity {
private static final String TAG = "EmailPassword";
private FirebaseAuth mAuth;
private LinearLayout linear1;
private TextInputLayout textinputlayout1;
private TextInputLayout textinputlayout2;
private TextInputEditText edittext1;
private TextInputEditText edittext2;
private Button button1;
private TextView textview1;
private Intent i =new Intent();
private SharedPreferences user;
private ProgressDialog prog;
private OnCompleteListener<AuthResult> _mAuth_sign_in_listener;
private void reload(){}
private void updateUI(FirebaseUser user){}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAuth = FirebaseAuth.getInstance();
setContentView(R.layout.activity_start);
LinearLayout _nav_view = (LinearLayout) findViewById(R.id._nav_view);
TextInputLayout textinputlayout1 = findViewById(R.id.textinputlayout1);
TextInputLayout textinputlayout2 = findViewById(R.id.textinputlayout2);
edittext1 = findViewById(R.id.edittext1);
edittext2 = findViewById(R.id.edittext2);
Button button1 = findViewById(R.id.button1);
TextView textview1 = findViewById(R.id.textview1);
SharedPreferences user = getSharedPreferences("user", Activity.MODE_PRIVATE);
Intent i= new Intent();
textview1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
i.setClass(getApplicationContext(), ForgotPassword.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signIn();
}
});
}
@Override
public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null) {
i.setClass(getApplicationContext(), MainActivity.class);
startActivity(i);
}
}
private void signIn(){
Toast.makeText(StartActivity.this,"Button clicked",Toast.LENGTH_SHORT).show();
String email=Objects.requireNonNull(edittext1.getText()).toString();
String password= Objects.requireNonNull(edittext2.getText()).toString();
if(edittext1!=null && edittext2!=null){
final ProgressDialog prog= new ProgressDialog(StartActivity.this);prog.setMax(100);prog.setMessage("Logging in...");prog.setIndeterminate(true);prog.setCancelable(true);
prog.show();
mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(StartActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
final boolean success= task.isSuccessful();
if(success){
i.setClass(getApplicationContext(),MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
prog.cancel();
}
else{
final String error=task.getException()!=null?task.getException().getMessage():"";
prog.cancel();
Toast.makeText(StartActivity.this,""+error,Toast.LENGTH_LONG).show();
}
}
});
}
else {
prog.cancel();
Toast.makeText(getApplicationContext(),"Email/Password cannot be empty!", Toast.LENGTH_SHORT).show();
}
}
public void onClick(View view) {
}
}
package com.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toolbar;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class MainActivity extends AppCompatActivity {
private FirebaseAuth mAuth;
private Toolbar toolbar1;
private Button button2;
private LinearLayout linear2;
private Intent i=new Intent();
private FirebaseUser user;
private TextView textview5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user= mAuth.getCurrentUser();
setContentView(R.layout.activity_main);
Toolbar toolbar1=findViewById(R.id.toolbar1);
LinearLayout linear2=findViewById(R.id.linear2);
textview5=findViewById(R.id.textview5);
Button button2=findViewById(R.id.button2);
assert user != null;
textview5.setText(user.getEmail());
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseAuth.getInstance().signOut();
i.setClass(getApplicationContext(),StartActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
}
});
toolbar1.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}
事故截图
您将获得
IllegalArgumentException
,因为您允许用户使用空凭据登录。发生这种情况是因为您检查EditText对象是否为空,而不是实际值:
if(edittext1!=null && edittext2!=null) { ... }
这是不正确的。您应该检查用户插入的值是否与空字符串不同。下面的if语句应该可以做到这一点:
if(!email.isEmpty() && !password.isEmpty()) { ... }
如果您在电子邮件或密码为空时向用户显示消息也会更好。您会遇到什么类型的崩溃?请共享崩溃日志/堆栈跟踪。如果应用程序崩溃,则存在堆栈跟踪。请在logcat上查找,并将其添加到您的问题中。请回复@AlexMamo@AlexMamo请看碰撞日志的截图,我已将其编辑到问题中。与其说是撞车,不如说是干杯。@Piyussatija请看上面的评论。谢谢:)您在哪一行代码中出现了错误?这很好,谢谢。另外,我删除了
prog.cancel()
,因为没有运行任何进度对话框,所以它给出了一个NullPointerException
。