Android nullpointerexception en ActionBarDrawerToggle.syncState ()

Lanzé mi aplicación hace unos días y, a veces, puedo forzar un accidente dejando la aplicación con el botón Atrás y luego abrirla unas horas más tarde. No siempre hace esto, de hecho es completamente al azar y 99 de cada 100 veces funciona bien, pero obviamente quiero 100.

Este es el bit relevante de mi Actividad:

public class MainActivity extends AppCompatActivity { private ActionBarDrawerToggle drawerToggle; private DrawerLayout drawerLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (findViewById(R.id.fragment_container) != null) { if (savedInstanceState != null) { return; } drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerToggle = new ActionBarDrawerToggle( this, drawerLayout, R.string.drawer_open, R.string.drawer_close ) { @Override public void onDrawerClosed(View view) { super.onDrawerClosed(view); invalidateOptionsMenu(); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); invalidateOptionsMenu(); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, 0); } }; drawerLayout.setDrawerListener(drawerToggle); } } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } } 

La excepción se encuentra en el drawerToggle.syncState(); línea. El rastro:

 `java.lang.RuntimeException: Unable to start activity ComponentInfo{io.my.my/io.my.my.ui.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBarDrawerToggle.syncState()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) at android.app.ActivityThread.access$900(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5942) 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:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBarDrawerToggle.syncState()' on a null object reference at io.my.my.ui.MainActivity.onPostCreate(MainActivity.java:130) at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1200) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2675) ... 10 more` 

Probablemente podría resolverlo haciendo la línea en un if (drawerToggle != null) ? Pero me gustaría saber por qué esto está sucediendo y si estoy haciendo algo mal. También es muy difícil de probar porque es tan aleatorio.

Editar : para hacerlo más claro, también estoy usando un drawback Layout que está vinculado a la drawerToggle. De acuerdo con https://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html :

Call syncState() from your Activity's onPostCreate to synchronize the indicator with the state of the linked DrawerLayout after onRestoreInstanceState has occurred.

Es por eso que estoy usando onPostCreate. No tengo un onStart.

En realidad, me olvidé de este bit que acabo de agregar al código:

  if (findViewById(R.id.fragment_container) != null) { if (savedInstanceState != null) { return; } } 

Parece que esta es la única explicación posible por qué drawerToggle es nulo … pero ¿por qué?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.