Aplicación peta en Android

kraneok

Hola gente, tengo un problema con un código, es una tontería supongo, pero no consigo ver el problema.
En el ejercicio se pide que calculemos el área de un trapecio mediante las variables que nos inserte el usuario, y además que los TextView sean escritos desde la mismo código Java.
Bien, al pulsar sobre el botón de calcular el área, la aplicación me peta, ¿ qué puede estar pasando ?

Gracias y un saludo

Activity Main

    public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                   
//TextView tv1 = (TextView) findViewById(R.id.tv1); tv2 = (TextView) findViewById(R.id.tv2); tv3 = (TextView) findViewById(R.id.tv3); tv1.setText("Base mayor"); tv2.setText("Base menor"); tv3.setText("Altura"); //EditText et1 = (EditText) findViewById(R.id.et1); et2 = (EditText) findViewById(R.id.et2); et3 = (EditText) findViewById(R.id.et3); //TextView Resultado tv4 = (TextView) findViewById(R.id.tv4); } public void calcularArea() { float bMayor, bMenor, altura; double resultado; bMayor = Float.parseFloat(et1.getText().toString()); bMenor = Float.parseFloat(et2.getText().toString()); altura = Float.parseFloat(et3.getText().toString()); resultado = ((bMayor + bMenor) / 2) * altura; tv4.setText(String.valueOf(resultado)); }
tOWERR

#1
¿El método calcularArea() se lo has asignado al evento onclick del Button?
Si lo has asignado, ¿Como se lo has asignado? Me podrías pegar el código del archivo main.xml?

¿Podrías enseñar el error que te lanza la aplicación en el LogCat?

kraneok

Ahora mismo no te lo puedo pegar, pero vamos te digo que está bien seguro, por que lo he puesto gráficamente, no he tocado el xml.
Vamos lo que viene a ser darle al botón derecho sobre el botón, etc, etc asignar evento onClick y poner calcularArea xDDD

tOWERR

Las variables de los elementos están declarados al principio de la clase supongo. Cuando puedas pegar el error que te lanza en el LogCat es más fácil ver el error.

1 respuesta
kraneok

#4 Si exacto xd, están declaradas.

C

¿Tienes más de una activity y no la has declarado en el manifest?
¿Usas permisos y no los has puesto en el manifest?

Ojo que yo he perdido horas enteras con errores tontísimos de ese estilo. O nos cuelgas el proyecto en github u otro sitio, o te toca comentar todo el código e ir descomentando secciones hasta dar con la tontería que debe ser.

Pégate el .xml del layout y miramos.

1 respuesta
kraneok

#6 OK, voy a entrar a Ubuntu y os meto los códigos xDD

Activity_Main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="TextView" />

<EditText
    android:id="@+id/et1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/tv1"
    android:ems="10" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/tv2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/et1"
    android:text="TextView" />

<EditText
    android:id="@+id/et2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/tv2"
    android:ems="10" />

<TextView
    android:id="@+id/tv3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/et2"
    android:text="TextView" />

<EditText
    android:id="@+id/et3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/tv3"
    android:ems="10" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:onClick="calcularArea"
    android:text="Calcular área del trapecio" />

<TextView
    android:id="@+id/tv4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="90dp"
    android:text=" " />

</RelativeLayout>

MainActivity.java

public class MainActivity extends Activity {
	
private EditText et1, et2, et3;
private TextView tv1, tv2, tv3 ,tv4;

  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        //TextView
        tv1 = (TextView) findViewById(R.id.tv1);
        tv2 = (TextView) findViewById(R.id.tv2);
        tv3 = (TextView) findViewById(R.id.tv3);
        tv1.setText("Base mayor");
        tv2.setText("Base menor");
        tv3.setText("Altura");
        
        //EditText
        et1 = (EditText) findViewById(R.id.et1);
        et2 = (EditText) findViewById(R.id.et2);
        et3 = (EditText) findViewById(R.id.et3);
        
        //TextView Resultado
        tv4 = (TextView) findViewById(R.id.tv4);
    }
    
    public void calcularArea()
    {
    	float bMayor, bMenor, altura;
    	double resultado;
    	
    	bMayor = Float.parseFloat(et1.getText().toString());
    	bMenor = Float.parseFloat(et2.getText().toString());
    	altura = Float.parseFloat(et3.getText().toString());
    	
    	resultado = ((bMayor + bMenor) / 2) * altura;
    	
    	tv4.setText(String.valueOf(resultado));
    	
    }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}
1 respuesta
C

#7 te peta por lo siguiente:

Has indicado la función a ejecutar para el evento onClick en el .xml:

<Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:onClick="calcularArea"
        android:text="Calcular área del trapecio" />

Hasta ahí todo bien, aunque no es lo más ortodoxo, pero bueno.

Y la función calcularArea la has declarado como:

public void calcularArea()
        {
            float bMayor, bMenor, altura;
            double resultado;
           
bMayor = Float.parseFloat(et1.getText().toString()); bMenor = Float.parseFloat(et2.getText().toString()); altura = Float.parseFloat(et3.getText().toString()); resultado = ((bMayor + bMenor) / 2) * altura; tv4.setText(String.valueOf(resultado)); }

Sin embargo, el evento onClick tiene como parámetro una objeto de tipo View. Y cuando se ejecuta la función, no lo encuentra y te da una excepción.

Solución: Prueba a declarar la función así:

        public void calcularArea(View v)
        {
            float bMayor, bMenor, altura;
            double resultado;
           
bMayor = Float.parseFloat(et1.getText().toString()); bMenor = Float.parseFloat(et2.getText().toString()); altura = Float.parseFloat(et3.getText().toString()); resultado = ((bMayor + bMenor) / 2) * altura; tv4.setText(String.valueOf(resultado)); }

Y verás como funciona

;)

kraneok

Ah!, pues si es eso xDD, se me olvidó meterle el parámetro al método xDD, que tontainas soy.

Muchas gracias tío, un saludo!

Usuarios habituales

  • kraneok
  • tOWERR