尽管存在nullpointerexception,如何在点击侦听器上运行android

问题描述 投票:0回答:3

我的项目抛出了一个nullpointerexception购买,尝试在null对象上调用onclicklistener。这是我的代码。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    buttonRegister = (Button) findViewById(R.id.buttonRegister);
    editTextEmail = (EditText) findViewById(R.id.editTextEmail);
    editTextPassword =  (EditText) findViewById(R.id.editTextPassword);
    buttonSignin = (Button) findViewById(R.id.buttonSignin);
 buttonRegister.setOnClickListener(this);
buttonSignin.setOnClickListener(this);



    progressDialog = new ProgressDialog(this);
    firebaseAuth = FirebaseAuth.getInstance();
    if (firebaseAuth.getCurrentUser() != null){
        finish();
        startActivity(new Intent(getApplicationContext(), ProfileActivity.class));  //it is here where the error is
    }
  }
 public void onClick(View view) {
    if(view == buttonRegister){
        registerUser();
    }
    if (view == buttonSignin)
        startActivity(new Intent(this, LoginActivity.class));
}

这里是logcat

 at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at com.example.myapplication7.MainActivityOne.onCreate(MainActivityOne.java:53)
    at android.app.Activity.performCreate(Activity.java:6679)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

这很有趣,因为昨天它对我来说很完美,但现在不行了。代码有什么问题?

java android click
3个回答
0
投票

您必须为Button的setOnClickListeners正确设置'context'。尝试这样做:

 buttonRegister.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
               registerUser();
            }
        });

 buttonSignin.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                startActivity(new Intent(this, LoginActivity.class));
            }
        });

此外,您可以使用更精确的方法来获取Firebase身份验证实例。当您使用电子邮件和密码登录时,可以使用Firebase身份验证的signInWithEmailAndPassword

由此,您还可以访问用户凭据,这可能对您应用程序的其他实例很有帮助。


-1
投票

在第53行,调用setOnClickListener的视图为null。

检查或调试,请保持它不是null。


-1
投票

原因:java.lang.NullPointerException:尝试调用虚拟方法“无效”android.view.View.setOnClickListener(android.view.View $ OnClickListener)'在空对象引用上

当应用程序尝试使用具有空值的对象引用时,抛出

NullPointerException

  1. 如果存在,则从XML中删除android:onClick方法。
  2. 请确保您的Button ID有效。检查您各自的xml。
  3. 您可以尝试

 buttonRegister.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
               registerUser();
            }
        });

 buttonSignin.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                startActivity(new Intent(this, LoginActivity.class));
            }
        });
© www.soinside.com 2019 - 2024. All rights reserved.