Expectativa de puntero nulo al configurar LayoutParams

Creé el botón en la actividad programmaticaly, no en archivo del xml. A continuación, quería configurar LayoutParams como en este enlace: ¿Cómo establecer mediante programación el atributo layout_align_parent_right de un botón en Disposición relativa?

Pero cuando intenté lanzar, tuve una excepción.

Aquí está mi código:

RelativeLayout ll2 = new RelativeLayout(this); //ll2.setOrientation(LinearLayout.HORIZONTAL); ImageButton go = new ImageButton(this); go.setId(cursor.getInt(cursor.getColumnIndex("_id"))); go.setClickable(true); go.setBackgroundResource(R.drawable.go); RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams)go.getLayoutParams(); params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); // LogCat said I have Null Pointer Exception in this line go.setLayoutParams(params1); go.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i3 = new Intent(RecipesActivity.this, MedicineActivity.class); i3.putExtra(ShowRecipe, v.getId()); i3.putExtra("Activity", "RecipesActivity"); RecipesActivity.this.startActivity(i3); } }); ll2.addView(go); 

¿Por qué mi aplicación genera una excepción? Gracias.

Cambia esto:

 RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams)go.getLayoutParams(); params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); go.setLayoutParams(params1); 

para:

 RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); go.setLayoutParams(params1); 

Cuando crea una Vista de forma programática, no tiene LayoutParams, es por eso que obtiene NullPointerException. Si infla la vista desde XML, la vista se presenta ahora con LayoutParams.

Por lo que veo, parece que

 go.getLayoutParams() 

devuelve null en esta línea

  RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams)go.getLayoutParams(); 

porque no tiene LayoutParams establecido para ello. Esto obviamente hará que params1 null para obtener NPE aquí

  params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

cuando intenta ejecutar un método en él ( addRule(RelativeLayout.ALIGN_PARENT_RIGHT) )

getLayoutParams() es para una View que tiene params ya establecidos. Por lo que tendrá que configurarlos para go antes de tratar de get que se utilice para otra View

Este método puede devolver null si esta vista no está asociada a un ViewGroup padre o {@link #setLayoutParams (android.view.ViewGroup.LayoutParams)} no se ha invocado correctamente. Cuando una vista está asociada a un grupo de vista principal, este método no debe devolver null.

De acuerdo con la anotación de getLayoutParams() en el View.java, su ImageButton se crea programly y no está conectado a un ViewGroup padre cuando se llama al método, por lo que devuelve null.

  • NullPointerException en android.app.ActivityThread.handleStopActivity
  • Error al entregar el resultado ResultInfo {who_null, request = 1, result = -1, data = Intent {(tiene extras)}} a la actividad; NullPointerException
  • NullPointer en toLowerCase pero no uso ese método en ninguna parte
  • FindViewById devuelve null en un LinearLayout dentro de una vista <include> d
  • Android NullPointerException al ejecutar la consulta en la base de datos SQLite
  • Java.lang.RuntimeException: Error al entregar el resultado ResultInfo {who = null, request = 1888, resultado = 0, data = null} a la actividad
  • java.lang.NullPointerException: Intenta invocar método de interfaz en un error de referencia de objeto nulo en OnPostExecute () - AsyncTask
  • NullPointerException al volver a través de actividades
  • NullPointer Exception en Android Google Maps durante la actualización de Mapa
  • ¿Por qué el servicio Android falla con NullPointerException?
  • ¿Por qué getApplicationContext () en el constructor de Activity lanza una excepción de puntero nulo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.