Question

Hello am new programming this is my first app I was trying to recreate an app that I found the tutorial. Is a tip calculator, the app opens without problems but when I try to use it stops working and close.

The XML code is

package com.primerprojecto.calculadora;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.widget.EditText;

public class Calculadora extends Activity {

private static final String  TOTAL = "TOTAL";
private static final String  PROPINA = "PROPINA";
private static final String  TOTAL_SIN_PROPINA = "TOTAL_SIN_PROPINA";

private double TotalAntesDePropina;
private double CantidadDePropina;
private double CuentaTotal;

EditText TotalAntesDePropinaET;
EditText CantidadDePropinaET;
EditText CuentaTotalET;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calculadora);


    if(savedInstanceState == null){

        TotalAntesDePropina = 0.0;
        CantidadDePropina = .15;
        CuentaTotal = 0.0;

    } else {

        TotalAntesDePropina = savedInstanceState.getDouble(TOTAL_SIN_PROPINA);
        CantidadDePropina = savedInstanceState.getDouble(PROPINA);
        CuentaTotal = savedInstanceState.getDouble(TOTAL);
    }

    TotalAntesDePropinaET = (EditText) findViewById(R.id.CuentaEditText);
    CantidadDePropinaET = (EditText) findViewById(R.id.PropinaEditText);
    CuentaTotalET = (EditText) findViewById(R.id.TotalEditText1);

    TotalAntesDePropinaET.addTextChangedListener(TotalAntesDePropinaListener);

}

    private TextWatcher TotalAntesDePropinaListener = new TextWatcher(){

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {


            try{
                TotalAntesDePropina = Double.parseDouble(arg0.toString());

            }
            catch(NumberFormatException e){

                TotalAntesDePropina = 0.0;  

        }  
            UpdateTipAndFinalBill();
        }   

};    
private void UpdateTipAndFinalBill(){


double CantidadDePropina = Double.parseDouble(CantidadDePropinaET.getText().toString());
double CuentaTotal = TotalAntesDePropina + (TotalAntesDePropina * CantidadDePropina);
CuentaTotalET.setText(String.format("%.02f",CuentaTotal));

}
protected void onSaveInstanceState(Bundle outState){

    super.onSaveInstanceState(outState);
    outState.putDouble(TOTAL, CuentaTotal);
    outState.putDouble(PROPINA, CantidadDePropina);
    outState.putDouble(TOTAL_SIN_PROPINA, TotalAntesDePropina);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.calculadora, menu);
    return true;
}

Log Cat

12-24 13:37:15.320: I/Choreographer(892): Skipped 39 frames!  The application may be doing too much work on its main thread.
12-24 13:37:16.390: D/gralloc_goldfish(892): Emulator without GPU emulation detected.
12-24 13:37:49.820: I/Choreographer(892): Skipped 166 frames!  The application may be doing too much work on its main thread.
12-24 13:37:52.470: E/InputEventSender(892): Exception dispatching finished signal.
12-24 13:37:52.470: E/MessageQueue-JNI(892): Exception in MessageQueue callback: handleReceiveCallback
12-24 13:37:52.810: E/MessageQueue-JNI(892): java.lang.NumberFormatException: Invalid double: ""
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at java.lang.StringToReal.invalidReal(StringToReal.java:63)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at java.lang.StringToReal.parseDouble(StringToReal.java:248)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at java.lang.Double.parseDouble(Double.java:295)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at com.primerprojecto.calculadora.Calculadora.UpdateTipAndFinalBill(Calculadora.java:89)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at com.primerprojecto.calculadora.Calculadora.access$1(Calculadora.java:86)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at com.primerprojecto.calculadora.Calculadora$1.onTextChanged(Calculadora.java:82)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.widget.TextView.sendOnTextChanged(TextView.java:7419)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.widget.TextView.handleTextChanged(TextView.java:7478)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9194)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:212)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:30)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:94)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:49)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:155)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:138)
12-24 13:37:52.810: E/MessageQueue-JNI(892):    at android.widget.TextView.doKeyDown(TextView.java:5543)
Was it helpful?

Solution

 java.lang.NumberFormatException: Invalid double: ""

You need to enter a valid double value in editText CantidadDePropinaET. I guess line 80 is the below line.

 double CantidadDePropina = Double.parseDouble(CantidadDePropinaET.getText().toString());

You can use a try catch

 try
   {
       double CantidadDePropina = Double.parseDouble(CantidadDePropinaET.getText().toString());   
   }
   catch(NumberFormatException e)
   {
         Toast.makeText(ActivityName.this,"Please Enter a valid double value",Toast.LENGTH_SHORT).show();
   }

OTHER TIPS

You're passing empty string to Double.parseDouble. Empty string is not a valid double. You should:

  1. Set EditText inputType to numberDecimal.
  2. Check if user input is valid (use try..catch block)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top