错误 - android 应用程序中的 NullpointErexception with DrawerLayout

error - NullpointException in an android app with DrawerLayout

我试图在 android 工作室中创建一个简单的 material 设计界面。我在打开抽屉的特定行遇到错误。只要我点击操作栏(工具栏)中的主页图标,应用程序就会崩溃。

这是我试过的代码。

public class MainActivity extends AppCompatActivity  {

public DrawerLayout mDrawerLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    android.support.v7.app.ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);
    actionBar.setDisplayHomeAsUpEnabled(true);

    DrawerLayout mDrawerLayout;
    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);

    FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Snackbar.make(findViewById(R.id.drawer_layout), "I'm a Snackbar", Snackbar.LENGTH_LONG).setAction("Action", new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "Snackbar Action", Toast.LENGTH_LONG).show();
                }
            }).show();
        }
    });
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    switch (id) {
        case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);
            return true;
        case R.id.action_settings:
            return true;
    }

    return super.onOptionsItemSelected(item);
}

}

我试过改变 FAB 和 Home Icon 的动作,成功了!!但是在使用主页图标打开的普通抽屉中,出现以下错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.openDrawer(int)' on a null object reference
        at jani.jigar.designdemo.MainActivity.onOptionsItemSelected(MainActivity.java:67)

我见过相同的情况,但他们没有初始化对象。我一开始就这样做了。我找不到错误。任何帮助将不胜感激。

发生这种情况是因为您在 onCreate 方法中使用局部变量为 activity 的实例变量 mDrawerLayout 添加了别名。由于 Java 中的作用域是从内到外的,因此您永远不会在方法之外设置 mDrawerLayout 的引用。因此,要解决您的问题,您只需从 onCreate.

中删除 DrawerLayout mDrawerLayout;