-1

I have this stack trace from Firebase Craslytics:

Fatal Exception: java.lang.NullPointerException Attempt to invoke virtual method 'void android.widget.ImageView.setVisibility(int)' on a null object reference com.accenture.vrmobile.BaseActivity.setDrawerVisibility(BaseActivity.java:497)

It's reporting crash in this method:

    public void setDrawerVisibility(Boolean visible) {
    if (mButtonActionBarLeft == null)
        mButtonActionBarLeft = (ImageView) findViewById(R.id.button_actionbar_left);
    if (mButtonActionBarRight == null)
        mButtonActionBarRight = (ImageView) findViewById(R.id.button_actionbar_right);
    if (visible) {
        mButtonActionBarLeft.setVisibility(View.VISIBLE); //crashes at this line
        mButtonActionBarRight.setVisibility(View.VISIBLE);
    } else {
        mButtonActionBarLeft.setVisibility(View.INVISIBLE);
        mButtonActionBarRight.setVisibility(View.INVISIBLE);
    }
}

I had this crash before, so I added these lines to the method:

if (mButtonActionBarLeft == null)
        mButtonActionBarLeft = (ImageView) findViewById(R.id.button_actionbar_left);
    if (mButtonActionBarRight == null)
        mButtonActionBarRight = (ImageView) findViewById(R.id.button_actionbar_right);

But it's still crashing and reporting nullPointerException. mButtonActionBarLeft and mButtonActionBarRight are buttons that opens/closes navigation drawer. I have no idea why is this happening. Maybe someone has experience with this? Thank you!

P.S. I was never able to reproduce this crash, it happens really rarely. I only have stack trace from Firebase.

3 Answers3

0

Create the instance of your ImageView into your Activity onCreate() callback

also make sure that you are creating instance which is present in your layout file with given id.

public void onCreate(Bundle savedInstanceState)
{
        if (mButtonActionBarLeft == null)
            mButtonActionBarLeft = (ImageView) findViewById(R.id.button_actionbar_left);
        if (mButtonActionBarRight == null)
            mButtonActionBarRight = (ImageView) findViewById(R.id.button_actionbar_right);
}

Learn more about NullPointerException:-What is a NullPointerException, and how do I fix it?

Mr. Roshan
  • 1,777
  • 13
  • 33
0

you must add View as input of function. for example,

public void setVisible(View view){
    view.setVisibility(View.VISIBLE);
}
setVisible(toolbarText);
Mehrdad
  • 1,477
  • 15
  • 17
0

Try this

    if (visible) {
        if(mButtonActionBarLeft.getVisibility()==View.INVISIBLE)
            mButtonActionBarLeft.setVisibility(View.VISIBLE);
        if(mButtonActionBarRight.getVisibility()==View.INVISIBLE)
            mButtonActionBarRight.setVisibility(View.VISIBLE);
    } else {
        if(mButtonActionBarLeft.getVisibility()==View.VISIBLE)
            mButtonActionBarLeft.setVisibility(View.INVISIBLE); 
        if(mButtonActionBarRight.getVisibility()==View.VISIBLE)
            mButtonActionBarRight.setVisibility(View.INVISIBLE);
    }
Shubham Vala
  • 1,024
  • 7
  • 18
  • Thank you! But the problem is, that you can't call get/set visibility on Null. What you are going here is just adding more of those calls. – Sandra Boguša Jul 05 '18 at 07:03