【问题标题】:Android app crashing instead of showing the Toast and throwing IllegalArgumentExceptionAndroid 应用程序崩溃而不是显示 Toast 并抛出 IllegalArgumentException
【发布时间】:2021-05-10 11:24:45
【问题描述】:

我用 LoginActivity 制作了一个简单的应用程序。如果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) {
    }
}

MainActivity.java

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();
             }
         });
    }
}

崩溃截图

【问题讨论】:

  • 您遇到什么类型的崩溃?请分享崩溃日志/堆栈跟踪。
  • 如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。请回复@AlexMamo
  • @AlexMamo 请查看崩溃日志的屏幕截图,我已将其编辑到问题中。它应该显示敬酒,而不是崩溃。
  • @PiyushSatija 请看上面的评论。谢谢:)
  • 您在哪一行代码中遇到了这个错误?

标签: java android firebase firebase-authentication


【解决方案1】:

您收到IllegalArgumentException 是因为您让用户使用空凭据登录。发生这种情况是因为您检查了 EditText 对象而不是实际值的无效性:

if(edittext1!=null && edittext2!=null) { ... }

这是不正确的。您应该检查用户插入的值是否与空字符串不同。下面的 if 语句应该可以解决问题:

if(!email.isEmpty() && !password.isEmpty()) { ... }

如果在邮箱或密码为空的情况下向用户显示一条消息也会更好。

【讨论】:

  • 这很好,谢谢。我还删除了prog.cancel(),它给出了NullPointerException,因为没有运行进度对话框。
猜你喜欢
  • 2018-04-24
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多