java.lang.numberformatexception: double no válido: “”

recibiendo un error de doble no válido java.lang.numberformatexception double inválido: “” cuál es la razón de esto

Actividad 1

package com.example.solarcalculator; import android.os.Bundle; import android.widget.Button; import android.annotation.SuppressLint; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.app.AlertDialog; import android.content.Intent; @SuppressLint("UseValueOf") public class MainActivity extends Activity { private EditText input1; private EditText input2; private EditText input3; private EditText input4; private EditText input5; private MainActivity mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; setContentView(R.layout.activity_main); input5 = (EditText) findViewById(R.id.input5); Button button1 = (Button) findViewById(R.id.button1); input4 = (EditText) findViewById(R.id.input4); input1 = (EditText) findViewById(R.id.input1); input2 = (EditText) findViewById(R.id.input2); input3 = (EditText) findViewById(R.id.input3); button1.setOnClickListener(new OnClickListener() { @SuppressWarnings("unused") private AlertDialog show; @SuppressLint("UseValueOf") @Override public void onClick(View arg0) { if ( (input4.getText().toString() == " ") || (input4.getText().length() ==0) || (input5.getText().length() == 0) || (input5.getText().toString() == " ")){ show = new AlertDialog.Builder(mContext).setTitle("Error") .setMessage("Some inputs are empty") .setPositiveButton("OK", null).show(); } else if ((input1.getText().length() != 0) && (input3.getText().length() ==0) && (input2.getText().length() == 0)){ double w = new Double(input3.getText().toString()); double t = new Double(input4.getText().toString()); double x = new Double(input5.getText().toString()); float e = 7; double num = 1000*x; double den = w*t*e; double payback = num/den; double money = w*t*e/1000; Intent intent = new Intent(MainActivity.this, Power.class); intent.putExtra("payback", payback); intent.putExtra("money", money); startActivity(intent); } else if ((input1.getText().length() == 0) && (input3.getText().length() != 0) && (input2.getText().length() != 0)){ double t = new Double(input4.getText().toString()); double x = new Double(input5.getText().toString()); double v = new Double(input2.getText().toString()); double i = new Double(input3.getText().toString()); float e = 7; double num = 1000*x; double den = v*i*t*e; double payback = num/den; double money = v*i*t*e/1000; Intent intent = new Intent(MainActivity.this, Power.class); intent.putExtra("payback", payback); intent.putExtra("money", money); startActivity(intent); } else { double t = new Double(input4.getText().toString()); double x = new Double(input5.getText().toString()); double v = new Double(input2.getText().toString()); double i = new Double(input3.getText().toString()); float e = 7; double num = 1000*x; double den = v*i*t*e; double payback = num/den; double money = v*i*t*e/1000; Intent intent = new Intent(MainActivity.this, Power.class); intent.putExtra("payback", payback); intent.putExtra("money", money); startActivity(intent); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

Actividad2

 package com.example.solarcalculator; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; @SuppressLint("NewApi") public class Power extends Activity { private double money; private double payback; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.power); payback = getIntent().getDoubleExtra("payback",0); money = getIntent().getDoubleExtra("money", 0); TextView pay = (TextView) findViewById(R.id.textView2); String payback1 = Double.toString(payback); pay.setText(payback1); TextView mon = (TextView) findViewById(R.id.textView4); String money1 = Double.toString(money); mon.setText(money1); } } 

Estoy obteniendo java.lang.numberformatexception double inválido: “” error en logcat alguien por favor ayuda

La razón es que “” no es un doble válido. Debes probar la Cadena antes o atrapar tales excepciones

 double w; try { w = new Double(input3.getText().toString()); } catch (NumberFormatException e) { w = 0; // your default value } 

El valor del doble depende del idioma del dispositivo. Por ejemplo, para dispositivos en francés, el número 0.179927 se convierte en 0,179927, que arrojará siempre una NumberFormatException al analizarla para que se double debido a la coma.

Necesita cambiar el separador de una comma a un point . Puede cambiar el separador configurando una configuración regional o utilizando los DecimalFormatSymbols .

Si desea que el separador de agrupación sea un punto, puede usar una configuración regional europea:

 NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); DecimalFormat df = (DecimalFormat)nf; 

Alternativamente, puede usar la clase DecimalFormatSymbols para cambiar los símbolos que aparecen en los números formateados producidos por el método de format . Estos símbolos incluyen el separador decimal, el separador de agrupación, el signo menos y el signo de porcentaje, entre otros:

 DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale); otherSymbols.setDecimalSeparator(','); otherSymbols.setGroupingSeparator('.'); DecimalFormat df = new DecimalFormat(formatString, otherSymbols); 

Deberías hacer lo siguiente. Ponlo dentro de un bloque try catch

  double w = new Double(input3.getText().toString()); 

Mejor también probar para .equals("") junto con null .

Considere que tiene un oyente afterTextChanged en un EditText. Cuando retroceda, presione y borre el texto ingresado, pasará != null , pero aún tiene "" .

Esto funcionó para mí:

  double myDouble; String myString = ((EditText) findViewById(R.id.editText1)).getText().toString(); if (myString != null && !myString.equals("")) { myDouble = Double.valueOf(myString); } else { myDouble = 0; }