Accidente de actividad de Android

Hice una sencilla calculadora de kilometraje de coche.

package com.android.carmanager;

import com.android.carmanager.CarManagerActivity;
import android.os.Bundle;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;


public class MileageCalculator extends CarManagerActivity {
private EditText input1;
private EditText input2;
private EditText input3;
private TextView distance;
private TextView showmileage;


  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mileagecalculator);

        input1 = (EditText) findViewById(R.id.input1);
        input2 = (EditText) findViewById(R.id.input2);
        input3 = (EditText) findViewById(R.id.input3);
        distance = (TextView) findViewById(R.id.distance);
        showmileage = (TextView) findViewById(R.id.showmileage);

        Button calculatebutton = (Button) findViewById(R.id.calculatebutton);

        double totaldistance = new Double(input2.getText().toString()) - new Double(input1.getText().toString());
        distance.setText(Double.toString(totaldistance));

        calculatebutton.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                double result = new Double(distance.getText().toString()) / new Double(input3.getText().toString());
                showmileage.setText(Double.toString(result));

            }

    });


}
}

Y el archivo .xml del calculador de millas está aquí:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/InitialOdo"
        android:padding="10dp" android:textStyle="bold"/>

    <EditText
        android:id="@+id/input1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:padding="10dp" >


    </EditText>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/FinalOdo"
        android:padding="10dp" 
        android:textStyle="bold"/>

    <EditText
        android:id="@+id/input2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:padding="10dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="@string/distance"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/distance"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"/>

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/fuelrefilled"
        android:padding="10dp" android:textStyle="bold"/>

    <EditText
        android:id="@+id/input3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:padding="10dp" />

    <Button
        android:id="@+id/calculatebutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/CalcMileage" />

    <TextView
        android:id="@+id/showmileage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_vertical|center_horizontal" />

</LinearLayout>

Cada vez que intento ejecutar esta sencilla actividad de calculadora de kilometraje, la aplicación se bloquea y vuelve a la pantalla de inicio. Encuentro los siguientes errores en el registro cat.

05-22 17:05:09.743: W/dalvikvm(542): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
05-22 17:05:09.793: E/AndroidRuntime(542): FATAL EXCEPTION: main
05-22 17:05:09.793: E/AndroidRuntime(542): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.carmanager/com.android.carmanager.MileageCalculator}: java.lang.NumberFormatException: Invalid double: ""
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.os.Looper.loop(Looper.java:137)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.app.ActivityThread.main(ActivityThread.java:4424)
05-22 17:05:09.793: E/AndroidRuntime(542):  at java.lang.reflect.Method.invokeNative(Native Method)
05-22 17:05:09.793: E/AndroidRuntime(542):  at java.lang.reflect.Method.invoke(Method.java:511)
05-22 17:05:09.793: E/AndroidRuntime(542):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-22 17:05:09.793: E/AndroidRuntime(542):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-22 17:05:09.793: E/AndroidRuntime(542):  at dalvik.system.NativeStart.main(Native Method)
05-22 17:05:09.793: E/AndroidRuntime(542): Caused by: java.lang.NumberFormatException: Invalid double: ""
05-22 17:05:09.793: E/AndroidRuntime(542):  at java.lang.StringToReal.invalidReal(StringToReal.java:63)
05-22 17:05:09.793: E/AndroidRuntime(542):  at java.lang.StringToReal.parseDouble(StringToReal.java:248)
05-22 17:05:09.793: E/AndroidRuntime(542):  at java.lang.Double.parseDouble(Double.java:295)
05-22 17:05:09.793: E/AndroidRuntime(542):  at java.lang.Double.<init>(Double.java:136)
05-22 17:05:09.793: E/AndroidRuntime(542):  at com.android.carmanager.MileageCalculator.onCreate(MileageCalculator.java:30)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.app.Activity.performCreate(Activity.java:4465)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-22 17:05:09.793: E/AndroidRuntime(542):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-22 17:05:09.793: E/AndroidRuntime(542):  ... 11 more
05-22 17:05:10.033: I/dalvikvm(542): threadid=3: reacting to signal 3
05-22 17:05:10.043: I/dalvikvm(542): Wrote stack traces to '/data/anr/traces.txt'
05-22 17:05:10.493: I/dalvikvm(542): threadid=3: reacting to signal 3
05-22 17:05:10.563: I/dalvikvm(542): Wrote stack traces to '/data/anr/traces.txt'
05-22 17:05:12.313: I/Process(542): Sending signal. PID: 542 SIG: 9

He reiniciado el eclipse, avd varias veces. Limpié la compilación y eliminé el archivo R.java varias veces, pero todavía estoy atascado aquí y no sé qué hacer a continuación.

preguntado el 22 de mayo de 12 a las 12:05

Causado por: java.lang.NumberFormatException: Double no válido: "" ¿Posiblemente no hay ningún valor en el texto de edición para pasar al constructor Double? -

@jiduvah Funciona cuando lo moví debajo del bloque setOnClickListener. Sin embargo, ¿qué debo hacer para mostrar la distancia total antes de hacer clic en el botón calcular? -

4 Respuestas

En su OnCreate método, está calculando un campo y está recuperando dobles de TextViews. Desafortunadamente, sus TextViews están en blanco y, por lo tanto, no se pueden convertir en dobles.

Esta es la línea del problema:

double totaldistance = new Double(input2.getText().toString()) 
              - new Double(input1.getText().toString());

Debe mover el cálculo solo al presionar el botón, validar los datos antes de intentar calcular o establecer algunos valores predeterminados.

contestado el 22 de mayo de 12 a las 12:05

Entonces probablemente debería mover este bloque en la pestaña setOnClickListener - Sanchit

Está funcionando cuando lo moví debajo del bloque setOnClickListener. Sin embargo, ¿qué debo hacer para mostrar la distancia total antes de hacer clic en el botón calcular? - Sanchit

¿Me podrían ayudar en la siguiente pregunta? stackoverflow.com/questions/10707563/… Cualquier ayuda sería apreciada. - Sanchit

Esto es lo que está causando el problema: double totaldistance = new Double(input2.getText().toString()) - new Double(input1.getText().toString());

Como sus campos de entrada de texto probablemente estén vacíos, no puede convertirlo en un flotador.

contestado el 22 de mayo de 12 a las 12:05

Soy un aficionado total a este nivel. ¿Podría guiarme en detalle sobre qué y cómo debo proceder para depurar este programa? Realmente apreciaría sus consejos. - Sanchit

Bueno, no puedes convertir una cadena vacía en un número. Entonces, podría comenzar configurando el texto de las vistas de texto en un número en el xml: Adam Honore

Déjame modificar mi código. Nos pondremos en contacto con usted si el problema persiste. Gracias - Sanchit

Está funcionando cuando lo moví debajo del bloque setOnClickListener. Sin embargo, ¿qué debo hacer para mostrar la distancia total antes de hacer clic en el botón calcular? - Sanchit

Parece que está tratando de usar una cadena como un doble aquí... Si está seguro de que el valor será un doble, tal vez podría convertirlo en un doble.

double totaldistance = new Double(input2.getText().toString()) - new Double(input1.getText().toString());
distance.setText(Double.toString(totaldistance));

contestado el 22 de mayo de 12 a las 12:05

double totaldistance = new Double(input2.getText().toString()) - new Double(input1.getText().toString());
distance.setText(Double.toString(totaldistance));

contestado el 22 de mayo de 12 a las 13:05

@blackbelt ¿Qué debo hacer para deshacerme de los errores? Soy un aficionado y agradecería su ayuda. Gracias - Sanchit

@Sanchit en realidad fue vikas quien respondió a su pregunta. - cinturón negro

@vikas Funciona cuando lo moví debajo del bloque setOnClickListener. Sin embargo, ¿qué debo hacer para mostrar la distancia total antes de hacer clic en el botón calcular? - Sanchit

@blackbelt ¿Podría ayudarme con la siguiente pregunta? stackoverflow.com/questions/10707563/… Cualquier ayuda sería apreciada. - Sanchit

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.