NullPointerException en onSaveInstanceState con AndroidFragments
Estoy recibiendo una NullPointerException cuando dejo una FragmentActivity y voy a ListActivity. En realidad, empiezo a ver la lista antes de obtener el cierre de la Fuerza. Pero el LogCat se refiere a la Actividad de la que acabo de llegar.
El LogCat dice esto:
- No se puede inyectar vista a clases personalizadas con RoboGuice
- - java.lang.NullPointerException - setText en la referencia de objeto nulo
- NullPointerException en el método restartLoader de LoaderManager
- Cómo capturar excepciones generadas con código nativo que se ejecuta en Android
- ¿Por qué estoy recibiendo una excepción de puntero nulo de actualización de hilo (Android AndEngine)?
08-31 07:38:53.356: E/AndroidRuntime(8134): FATAL EXCEPTION: main 08-31 07:38:53.356: E/AndroidRuntime(8134): java.lang.NullPointerException 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481) 08-31 07:38:53.356: E/AndroidRuntime(8134): at com.---.myApp.MasterCat.onSaveInstanceState(MasterCat.java:119) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.app.Activity.performSaveInstanceState(Activity.java:1137) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1215) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3077) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3136) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.app.ActivityThread.access$900(ActivityThread.java:142) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1235) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.os.Handler.dispatchMessage(Handler.java:99) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.os.Looper.loop(Looper.java:137) 08-31 07:38:53.356: E/AndroidRuntime(8134): at android.app.ActivityThread.main(ActivityThread.java:4928) 08-31 07:38:53.356: E/AndroidRuntime(8134): at java.lang.reflect.Method.invokeNative(Native Method) 08-31 07:38:53.356: E/AndroidRuntime(8134): at java.lang.reflect.Method.invoke(Method.java:511) 08-31 07:38:53.356: E/AndroidRuntime(8134): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 08-31 07:38:53.356: E/AndroidRuntime(8134): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 08-31 07:38:53.356: E/AndroidRuntime(8134): at dalvik.system.NativeStart.main(Native Method)
La línea 119 en MasterCat es:
@Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); }
No estoy seguro de qué otro código mostrar, por favor hágamelo saber. Mi configuración básica contiene 4 clases internas estáticas que son todos fragmentos dentro de la FragmentActivity
padre (utilizando la biblioteca de soporte). Utiliza pestañas y un viewpager.
EDIT, Más Código:
public class MasterCat extends FragmentActivity implements ActionBar.TabListener { SectionsPagerAdapter mSectionsPagerAdapter; ViewPager mViewPager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_layout); mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mViewPager = (ViewPager) findViewById(R.id.viewpager); mViewPager.setAdapter(mSectionsPagerAdapter); mViewPager .setOnPageChangeListener( new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { actionBar.addTab(actionBar.newTab() .setText(mSectionsPagerAdapter.getPageTitle(i)) .setTabListener(this)); } } public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {} @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { mViewPager.setCurrentItem(tab.getPosition()); } public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {} public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Fragment f = null; switch (position) { case 0: { f = new MasterFrag(); Bundle args = new Bundle(); f.setArguments(args); break; } case 1: { f = new FeaturedFrag(); Bundle args = new Bundle(); f.setArguments(args); break; } case 2: { f = new TopFrag(); Bundle args = new Bundle(); f.setArguments(args); break; } case 3: { f = new NewFrag(); Bundle args = new Bundle(); f.setArguments(args); break; } default: throw new IllegalArgumentException("not this many fragments: " + position); } return f; } @Override public int getCount() { return 4; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return getString(R.string.mastercattab1).toUpperCase(); case 1: return getString(R.string.mastercattab2).toUpperCase(); case 2: return getString(R.string.mastercattab3).toUpperCase(); case 3: return getString(R.string.mastercattab4).toUpperCase(); } return null; } } }
Un Fragmento Típico tiene un esquema como este:
public static class FeaturedFrag extends Fragment { public FeaturedFrag() {} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.rateithome, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } }
- Androide. Fragmento getActivity () a veces devuelve null
- SwitchPreference (PreferenceAtivity) - Android NULL
- ViewPager ¿Fragmentos que se destruyen con el tiempo?
- ¿Por qué se arroja NPE al finalizar Actividad?
- IllegalStateException: Fragmento <ThisFragment> no está actualmente en el FragmentManager
- Long.getLong () fallando, devolviendo null a cadena válida
- NullPointerException en FirebaseMessagingService.zzo (fuente desconocida)
- Excepción en unbindDrawables
Parece que este es un error conocido en la Biblioteca de soporte de Android . Afortunadamente, ha sido parcheado.
Para corregir el error:
- Utilice el Administrador de SDK para actualizar a la versión más reciente de la biblioteca de soporte
- Reemplace el archivo
android-support-v4.jar
en laslibs/
carpeta de su aplicación con la nueva versión que acaba de descargar
Prueba esto:
public void onSaveInstanceState(Bundle savedInstanceState) { if (savedInstanceState != null) { super.onSaveInstanceState(savedInstanceState); } }
Si sólo desea una solución rápida, agregue esto a su código de fragmento:
@Override public void onSaveInstanceState(Bundle outState) { // Workaround to avoid NPE from support library bug: setUserVisibleHint(false); super.onSaveInstanceState(outState); }
La propiedad setUserVisibleHint
es de hecho una sugerencia para la optimización y no debería causar ningún problema, consulte la documentación de referencia de Android .
Por supuesto, la actualización de la biblioteca de soporte como respondida por theisenp podría ser más deseable en el largo plazo.
- Error en el manifiesto después de actualizar a android studio 1.4
- Android MotionEvent ACTION_MOVE eficiencia. ¿Cómo mejorar el rendimiento?