Null Pointer Exception on child en onMeasure (): futuresimple / floating-action-button

Botón de acción flotante de Android Lib

Creé el menú de la acción flotante en el archivo del xml y creando el botón dinámico de la acción flotante debajo de este menú flotante de la acción. Estoy fijando el mapa de imagen en cada FAB. En alguna condición en particular, tengo que eliminar todos los botones en el menú de acción flotante. Pero en el removeView() de removeView() , estoy consiguiendo la Null Pointer Exception en el objeto del niño, cuando está intentando conseguir visibilidad del niño en el método de onMeasure() . Debajo está el rastro de la pila y mi código.

 java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference at com.getbase.floatingactionbutton.FloatingActionsMenu.onMeasure(FloatingActionsMenu.java:224) at android.view.View.measure(View.java:17565) at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1263) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at android.widget.ScrollView.onMeasure(ScrollView.java:337) at android.view.View.measure(View.java:17565) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) at android.view.View.measure(View.java:17565) at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:940) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at android.view.View.measure(View.java:17565) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17565) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) at android.view.View.measure(View.java:17565) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2045) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1196) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1409) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:746) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5343) 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(Z 

Código para agregar dinámicamente un botón de acción de flotante que se quita:

  @Override public void onTap() { if (menuMultipleActions != null) { for (int i = 1; i <= mSelectedImages.size(); i++) { System.out.println("i value ==> " + i); menuMultipleActions.removeView(menuMultipleActions.getChildAt(i)); } } mSelectedImages.clear(); } @Override public void onPictureTaken(String filePath) { mSelectedImages.add(filePath); menuMultipleActions = (FloatingActionsMenu) findViewById(R.id.multiple_action); Snackbar.make(this.findViewById(android.R.id.content), "size = " + mSelectedImages.size(), Snackbar.LENGTH_SHORT).show(); if (mSelectedImages.size() > 0) { for (int num = 0; num < mSelectedImages.size(); num++) { floatingActionButton = new com.getbase.floatingactionbutton.FloatingActionButton(getBaseContext()); floatingActionButton.setSize(com.getbase.floatingactionbutton.FloatingActionButton.SIZE_MINI); floatingActionButton.setImageBitmap(getImageFromPath(mSelectedImages.get(num))); floatingActionButton.setId(num); menuMultipleActions.addButton(floatingActionButton); } } } 

2 Solutions collect form web for “Null Pointer Exception on child en onMeasure (): futuresimple / floating-action-button”

Intente usar el menuMultipleActions.removeButton() lugar del método removeView() . Internamente, el removeButton manipula algunos indicadores.

FloatingActionButton.java

Hay dos problemas con el código dado. En primer lugar, como Viswanath señala arriba usando removeView () como sigue siempre se bloquea (independientemente del bucle)

 menuMultipleActions.removeView(menuMultipleActions.getChildAt(0)); 

El segundo problema es que el bucle siempre se bloqueará en parte porque, al eliminar cada botón, el número de vistas en menuMultipleActions disminuye en uno. La solución a esto sería hacer un bucle hacia atrás, o borrar siempre el zeroth, por ejemplo

 if (menuMultipleActions != null) { for (int i = 0; i < mSelectedImages.size(); i++) { System.out.println("i value ==> " + i); menuMultipleActions.removeButton((FloatingActionButton) menuMultipleActions.getChildAt(0)); } } 

Aunque podría estar más inclinado a usar menuMultipleActions.getChildCount () como una forma más segura de encontrar el número de botones.

La solución más general, que funcionará en un bucle o para eliminar cualquier botón único por id sería utilizar findViewById para encontrar el botón antes de eliminarlo. p.ej

 FloatingActionButton fab = (FloatingActionButton) menuMultipleActions.findViewById(ButtonId); if (fab != null) menuMultipleActions.removeButton(fab); 

Si se establece una etiqueta para el FloatingActionButton también puede utilizar findViewByTag porque la implementación utiliza la etiqueta como la etiqueta.

  • NullPointerException al volver a través de actividades
  • java.lang.NullPointerException: Intenta invocar el método de interfaz 'OnColorChangeListener.colorChanged (java.lang.String)' en una referencia de objeto nulo
  • Excepción de puntero NULL de getSupportFragmentManager de Android en Fragmento
  • NullPointer en startIntentSenderForResult, no aplicando V3
  • Android: ¿Cómo detectar en el reanudamiento que mi aplicación fue asesinada por VM?
  • ParseSdkContent failed No se pudo inicializar la clase android.graphics.Typeface
  • NullPointerException Causado por getActionBar ()
  • Nullpointerexception en getView de ArrayAdapter personalizado
  • Error al crear los controles de la pieza
  • Android proguard obfuscated código está causando NullPointerException cuando realmente no debe ser
  • RecyclerViewAdapter.notifyDataSetChanged () en una referencia de objeto nulo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.