How to fix NullPointerException in v4.DrawerLayout?

I am trying to implement a navigation box, but for some reason I get this null pointer exception .

I spent a lot of time on it, but in vain. This is part of my code. I cannot understand why it is returning a null pointer exception.

Do I need to import any library?

Thanks in advance.

package com.motobeans.productions.aloha; import android.app.FragmentManager; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarDrawerToggle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import java.util.Locale; import android.app.Fragment; import android.support.v7.widget.Toolbar; import android.widget.ImageView; import android.widget.ListView; public class Activity_test extends ActionBarActivity { private String[] mPlanetTitles; private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mTitle; private CharSequence mDrawerTitle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); setSupportActionBar(toolbar); mPlanetTitles = getResources().getStringArray(R.array.planets_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); mTitle = mDrawerTitle = getTitle(); // Set the adapter for the list view mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mPlanetTitles)); // Set the list click listener mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { /** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { super.onDrawerClosed(view); getActionBar().setTitle(mTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } /** Called when a drawer has settled in a completely open state. */ public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; // Set the drawer toggle as the DrawerListener mDrawerLayout.setDrawerListener(mDrawerToggle); } @Override public boolean onPrepareOptionsMenu(Menu menu) { // If the nav drawer is open, hide action items related to the content view boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_websearch).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } 

This is logcat output

 Process: com.motobeans.productions.aloha, PID: 1330 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.motobeans.productions.aloha/com.motobeans.productions.aloha.Activity_test}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.setDrawerListener(android.support.v4.widget.DrawerLayout$DrawerListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.setDrawerListener(android.support.v4.widget.DrawerLayout$DrawerListener)' on a null object reference at com.motobeans.productions.aloha.Activity_test.onCreate(Activity_test.java:74) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)            at android.app.ActivityThread.access$800(ActivityThread.java:151)            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)            at android.os.Handler.dispatchMessage(Handler.java:102)            at android.os.Looper.loop(Looper.java:135)            at android.app.ActivityThread.main(ActivityThread.java:5254)            at java.lang.reflect.Method.invoke(Native Method)            at java.lang.reflect.Method.invoke(Method.java:372)            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+6
source share
4 answers

It seems that mDrawerLayout is null when calling .setDrawerListener() .

Make sure you use the same identifier for the navigation box in findViewById(R.id.drawer_layout) and in the layout file.

+16
source

A similar issue was reported on google at https://code.google.com/p/android/issues/detail?id=202478

DrawerLayout.removeDrawerListener () is called without a set of DrawerLayout.DrawerListener

But after the releases in the Android Support Library, revision 23.2.1 (March 2016) This problem is resolved.

Upgrade your support library to Android Support Library to 23.2.1 or later.

+1
source

use getSupportActionBar() instead of getActionBar()

0
source

It seems that mDrawerLayout not been created properly, so it is mDrawerLayout NULL Pointer exception. To solve this problem, please create all instances properly.

 DrawerLayout drawer; drawer = findViewById(R.id.drawer_layout); 
0
source

All Articles