我有来自Firebase Craslytics
的堆栈跟踪:
致命异常:java.lang.NullPointerException尝试调用 虚方法'void android.widget.ImageView.setVisibility(int)'在 空对象引用 com.accenture.vrmobile.BaseActivity.setDrawerVisibility(BaseActivity.java:497)
此方法报告崩溃:
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);
}
}
我之前曾发生过崩溃,因此我将以下行添加到方法中:
if (mButtonActionBarLeft == null)
mButtonActionBarLeft = (ImageView) findViewById(R.id.button_actionbar_left);
if (mButtonActionBarRight == null)
mButtonActionBarRight = (ImageView) findViewById(R.id.button_actionbar_right);
但是它仍然崩溃并报告nullPointerException
。 mButtonActionBarLeft和mButtonActionBarRight是用于打开/关闭导航抽屉的按钮。
我不知道为什么会这样。也许有人对此有经验?
谢谢!
P.S。我从来没有能够重现这种崩溃,这种情况很少发生。我只有来自Firebase
的堆栈跟踪。
答案 0 :(得分:0)
在活动ImageView
回调中创建onCreate()
的实例
还要确保您正在创建具有给定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);
}
了解有关NullPointerException的更多信息:-What is a NullPointerException, and how do I fix it?
答案 1 :(得分:0)
您必须添加View作为功能的输入。例如,
public void setVisible(View view){
view.setVisibility(View.VISIBLE);
}
setVisible(toolbarText);
答案 2 :(得分:0)
尝试一下
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);
}