【问题标题】:getting "java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener)' on a null object reference" [duplicate]获取“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.widget.Button.setOnClickListener)'” [重复]
【发布时间】:2020-08-03 18:39:02
【问题描述】:

我试图进行 firebase 身份验证,但由于某种原因,此按钮给出了 NullPointerException,我检查了按钮名称,但找不到它抛出此类错误的原因

代码和Logcat包含在下面

Logcat:

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at com.anan.login.MainActivity.onCreate(MainActivity.java:45)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

Main.java:

public class MainActivity extends AppCompatActivity {
    EditText mEmail,mPassword;
    Button mButton;
    TextView Login;
    FirebaseAuth fAuth;
    ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mEmail = findViewById(R.id.Email);
        mPassword = findViewById((R.id.Password));
        //mButton = findViewById(R.id.button);
        progressBar = findViewById(R.id.progressBar);
        fAuth = FirebaseAuth.getInstance();

        if (fAuth.getCurrentUser() != null){
            startActivity(new Intent(getApplicationContext(),Main2Activity.class));
            finish();



        }

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String Email = mEmail.getText().toString().trim();
                String password = mPassword.getText().toString().trim();

                progressBar.setVisibility(View.VISIBLE);
                //Register user in Firebase
                fAuth.createUserWithEmailAndPassword(Email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){
                            Toast.makeText(MainActivity.this, "Register Successful", Toast.LENGTH_SHORT).show();
                            startActivity(new Intent(getApplicationContext(),Main2Activity.class));

                        }else{
                            Toast.makeText(MainActivity.this, "Register failed", Toast.LENGTH_SHORT).show();
                        }

                    }
                });

            }
        });

    }
}

Main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <EditText
        android:id="@+id/Email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Email"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.52"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.25" />

    <EditText
        android:id="@+id/Password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Password"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.52"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/imageView"
        app:layout_constraintVertical_bias="0.405" />


    <Button
        android:id="@+id/button"
        android:layout_width="79dp"
        android:layout_height="52dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

.................................................. ..................................................... .....

【问题讨论】:

    标签: java android firebase nullpointerexception firebase-authentication


    【解决方案1】:

    您从未为mButton 赋值。你有一个作业被注释掉了:

            //mButton = findViewById(R.id.button);
    

    如果您不为其分配一个值,该值是视图层次结构中的实际视图,它将保留默认值 null。

    另外,我注意到您从未夸大过您的布局。您根本没有任何视图可以使用。

    【讨论】:

      【解决方案2】:

      在访问它的小部件之前将视图绑定到您的活动

      在 onCreate(..) 方法中 super.onCreate(savedInstanceState); 之后添加以下行

         setContentView(R.layout.main);
      

      【讨论】:

        【解决方案3】:
        1. 您没有在 onCreate 方法中指定布局,因此您的主要活动没有布局可膨胀

        2. 您没有在 onCreate 方法中为 mButton 赋值,因此它被自动赋值为 null。

        将您的 onCreate 代码替换为以下内容:

            @Override
            protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);                   //Specify your layout
             mEmail = findViewById(R.id.Email);
             mPassword = findViewById((R.id.Password));
             mButton = findViewById(R.id.button);             //Assign a value to mButton from your layout
             progressBar = findViewById(R.id.progressBar);
             fAuth = FirebaseAuth.getInstance();
        
             if (fAuth.getCurrentUser() != null){
                startActivity(new Intent(getApplicationContext(),Main2Activity.class));
                finish();
                }
        
        
            }
        

        【讨论】:

          猜你喜欢
          • 2015-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-07
          • 2016-07-30
          相关资源
          最近更新 更多