Excepción de puntero nulo – Obtener el valor de EditarTexto
Esta es mi primera pregunta aquí, me disculparé de antemano si no hice esta pregunta muy bien. He mirado mis otras preguntas similares a mi problema, pero no he encontrado una buena solución para satisfacer lo que está sucediendo en mi programa.
Así que mi problema es que estoy tratando de asignar un valor a una variable llamada, num1
de mi campo EditText
llamado, num1TextField
, pero no estoy teniendo ninguna suerte hasta ahora.
- Declare EditText como TextView en Android
- Android EditText Gmail tiene gusto de campo
- Borrado de una multilínea EditText
- Android: quitar Enter Key de softkeyboard
- Cómo eliminar todos los oyentes agregados con addTextChangedListener
El segmento dentro de mi archivo java que lanza la excepción es:
EditText num1Field = (EditText)v.findViewById(R.id.num1TextField); num1 = num1Field.getText().toString();
Aprecio cada contribución a este problema por adelantado.
Aquí está mi archivo fragment_compute.xml
:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="14dp" android:text="@string/compute_activity" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" android:layout_marginTop="44dp" android:text="@string/num_1" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/num1TextField" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" android:ems="10" android:inputType="number" android:gravity="center" > <requestFocus /> </EditText> <EditText android:id="@+id/num2TextField" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/num1TextField" android:layout_below="@+id/textView3" android:ems="10" android:inputType="number" android:layout_centerHorizontal="true" android:gravity="center" > </EditText> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/num2TextField" android:layout_centerHorizontal="true" android:layout_marginTop="22dp" android:text="@string/result" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/num1TextField" android:layout_centerHorizontal="true" android:layout_marginTop="22dp" android:text="@string/num_2" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView4" android:layout_centerHorizontal="true" android:layout_marginTop="22dp" /> <Button android:id="@+id/compute_multiply" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/num2TextField" android:layout_below="@+id/result" android:layout_marginTop="40dp" android:text="@string/multiply" /> <Button android:id="@+id/compute_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/compute_multiply" android:layout_alignBottom="@+id/compute_multiply" android:layout_alignLeft="@+id/num2TextField" android:text="@string/add" /> </RelativeLayout>
Aquí está mi código de ComputeFragment.java
:
public class ComputeFragment extends Fragment { String num1; String num2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_compute, parent, false); // Add Button Button addButton = (Button)v.findViewById(R.id.compute_add); addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // ERROR STARTS HERE! EditText num1Field = (EditText)v.findViewById(R.id.num1TextField); num1 = num1Field.getText().toString(); // Null Pointer Exception is thrown here! EditText num2Field = (EditText)v.findViewById(R.id.num2TextField); num2 = num2Field.getText().toString(); // ERROR ENDS HERE! Intent i = new Intent(getActivity(), AddActivity.class); i.putExtra("x", num1); i.putExtra("y", num2); startActivityForResult(i,0); } }); return v; } }
¡Gracias a todos y tengan un buen día!
- Los mismos fragmentos, edittext y requestfocus emiten
- Android - EditTexts dentro de ListView vinculado a Custom ArrayAdapter - manteniendo un registro de los cambios
- Android edittext auto crecer con el texto y empujar las cosas hacia abajo
- Editar texto que muestra el subrayado rojo en el texto
- Android EditText rezagado al escribir texto
- Mostrar una lista desplegable del texto ingresado recientemente al hacer clic en un cuadro de edición de Android
- Android cómo configurar el cursor EditText al final de su texto
- Formato EditarTexto a moneda con números enteros
El parámetro v en EditText num1Field = (EditText)v.findViewById(R.id.num1TextField);
es su botón, no toda la vista.
Debe declarar la variable en onCreateView
:
final EditText num1Field = (EditText)v.findViewById(R.id.num1TextField);
Y usarlo para obtener el valor en onClick
num1 = num1Field.getText().toString();
La vista de parámetros es el botón. Si el botón está en el mismo padre que editTexts también podría hacer:
View parentView = (View) view.getParent(); EditText num1TextField = (EditText)parentView.findViewById(R.id.num1TextField);
Pruebe este código –
@Override public void onClick(View view) { EditText num1Field = (EditText)v.findViewById(R.id.num1TextField); if(num1Field.getText().length() > 0) { num1 = num1Field.getText().toString(); } }