java.lang.numberformatexception: недействительный double: “”

получение ошибки недопустимого Double java.lang.numberformatexception недействительным double: “”, в чем причина этого

Мероприятие 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; } } 

деятельности2

 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); } } 

Я получаю java.lang.numberformatexception недействительным double: “” ошибка в logcat кто-нибудь, пожалуйста, помогите

4 Solutions collect form web for “java.lang.numberformatexception: недействительный double: “””

Причина в том, что “” не является действительным двойным. Вам нужно проверить строку до или уловить такие исключения

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

Значение double зависит от языка устройства. Например, для устройств на французском языке номер 0.179927 равен 0,179927, который всегда будет NumberFormatException при parsingе его в double из-за запятой.

Вам нужно изменить разделитель от comma до point . Вы можете изменить разделитель либо путем установки языкового стандарта, либо с помощью DecimalFormatSymbols .

Если вы хотите, чтобы разделитель группировки был точкой, вы можете использовать европейский язык:

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

В качестве альтернативы вы можете использовать class DecimalFormatSymbols для изменения символов, отображаемых в форматированных числах, создаваемых методом format . Эти символы include десятичный разделитель, разделитель группировки, знак минуса и знак процента, среди прочего:

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

Вы должны сделать так, как показано ниже. Поместите его внутри блока catch try

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

Лучше также проверить на .equals("") вместе с null .

У вас есть прослушиватель afterTextChanged в EditText. Когда вы вернетесь, нажмите и очистите введенный текст, он пройдет != null , но все равно "" .

Это сработало для меня:

  double myDouble; String myString = ((EditText) findViewById(R.id.editText1)).getText().toString(); if (myString != null && !myString.equals("")) { myDouble = Double.valueOf(myString); } else { myDouble = 0; } 
  • Получите вложенный объект JSON с помощью GSON с помощью модифицированной
  • НЕОПРЕДЕЛЕННОЕ ТОП-УРОВЕННОЕ ИСКЛЮЧЕНИЕ: com.android.dex.DexException: несколько файлов dex определяют
  • В чем разница между == vs equals () в Java?
  • Загрузка Android из URL в Bitmap
  • округлить до 2 десятичных знаков в java?
  • Почему Spring MVC отвечает 404 и сообщает «Нет сопоставления для HTTP-запроса с URI в DispatcherServlet»?
  • декомпиляция DEX в исходный код Java
  • Как преобразовать массив байтов в строку и наоборот?
  • Что такое IndexOutOfBoundsException? Как я могу это исправить?
  • Не удалось указать целевые платформы. Проверьте правильность пути sdk android.
  • Разделить строку на пробелы в Java, за исключением того, что между кавычками (например, лечить \ "привет мир \" как один токен)
  • Давайте будем гением компьютера.