Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用程序崩溃,而不是显示Toast和抛出IllegalArgumentException_Java_Android_Firebase_Firebase Authentication - Fatal编程技术网

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