java.lang.numberformatexception:invalid double:“”

得到一个无效的错误Double java.lang.numberformatexception invalid 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无效的双重:“”在logcat中的任何人请帮助

原因是,“”不是一个有效的双。 您需要先testingstring或捕获这些exception

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

你应该做如下。 把它放在try catch块内

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

double的值取决于设备的语言。例如,对于法语设备,数字0.179927变为0,179927 ,当由于逗号将其parsing为double时,将总是抛出NumberFormatException

您需要将分隔符从comma更改为一个point 。 您可以通过设置区域设置或使用DecimalFormatSymbols来更改分隔符。

如果您希望分组分隔符是一个点,则可以使用欧洲语言环境:

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

或者,您可以使用DecimalFormatSymbols类来更改由format方法生成的格式化数字中出现的符号。 这些符号包括小数点分隔符,分组分隔符,减号和百分号等等:

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

最好还要testing.equals("")null

考虑你在EditText上有一个afterTextChanged监听器。 当你按下并清除input的文本时,它会传递!= null ,但仍然有""

这对我工作:

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