как заставить android на прослушивателе кликов работать, несмотря на исключение nullpointerexception - PullRequest
0 голосов
/ 28 мая 2020

Мой проект выдает nullpointerexception buy при попытке вызвать 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) 

, и это интересно, потому что вчера он отлично работал у меня, а теперь нет. что не так с кодом?

1 Ответ

0 голосов
/ 28 мая 2020

Вы должны правильно установить «контекст» для setOnClickListeners ваших кнопок. Попробуйте сделать так:

 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 .

Отсюда вы также можете получить доступ к учетным данным пользователя, которые могут быть полезны в других экземплярах вашего приложения.

...