我真的开始学习 Java。 当我运行这段代码时,一切正常,直到我将我的 EditText 框从空开始并点击运行按钮。然后我得到:
ERROR/AndroidRuntime(866): FATAL EXCEPTION: main
ERROR/AndroidRuntime(866): java.lang.NumberFormatException:
ERROR/AndroidRuntime(866): at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:267)
我想当我尝试从字符串解析 Double 时,它没有获得任何值并产生错误。 我想知道如何避免此错误并为变量赋予某种值以使其永远不会为空?感谢所有的帮助!
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
public class Main extends Activity {
private EditText noKids;
private EditText noGumballs;
private TextView noSum;
private Button b;
private Button br;
double etKids = 0;
double etGumballs = 0;
private double tvSumIn = 0.00;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initControls();
}
private void initControls() {
noKids = (EditText) findViewById(R.id.xetKids);
noGumballs = (EditText) findViewById(R.id.xetGumballs);
noSum = (TextView) findViewById(R.id.tvSum);
br = (Button) findViewById(R.id.xbtnReset);
br.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
reset();
br.setVisibility(View.INVISIBLE);
}
private void reset() {
noKids.setText("");
noGumballs.setText("");
noSum.setText("");
}
});
b = (Button) findViewById(R.id.xbtnCalculate);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
calculate();
br.setVisibility(View.VISIBLE);
}
private void calculate() {
etKids = Double.parseDouble(noKids.getText().toString());
etGumballs = Double.parseDouble(noGumballs.getText().toString());
tvSumIn = etGumballs / etKids;
String thisIsIt = new Double(tvSumIn).toString();
if(tvSumIn < 2){
noSum.setText(thisIsIt + " This is it ");
}else{
noSum.setText("This is else");
}
}
});
}
}
这是我的 main.xml 文件 我猜没有什么特别的东西可以放入 list 中。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="How many kids have you got?"></TextView>
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:id="@+id/xetKids">
<requestFocus></requestFocus>
</EditText>
<TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="How many gumballs have you got?"></TextView>
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:id="@+id/xetGumballs"></EditText>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Calculate" android:id="@+id/xbtnCalculate"></Button>
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tvSum"></TextView>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/xbtnReset" android:text="Reset" android:onClick="selfDestruct" android:visibility="invisible"></Button>
</LinearLayout>
最佳答案
这是 java.lang.Double 类的 JavaDoc,parseDouble 方法:
/**
* Parses the specified string as a double value.
*
* @param string
* the string representation of a double value.
* @return the primitive double value represented by {@code string}.
* @throws NumberFormatException
* if {@code string} is {@code null}, has a length of zero or
* can not be parsed as a double value.
* @since Android 1.0
*/
空值不被认为是可解析的。这就是您得到此异常的原因。
您可以对您的代码进行额外检查,以查看 noKids EditText 中的字符串是否为空,如果是,则手动将值设置为 0.0:
noKidsStr = noKids.getText().toString();
if(noKidsStr == null || noKidsStr.isEmpty()) {
etKids = 0.0;
} else {
etKids = Double.parseDouble(noKids.getText().toString());
}
我建议编写一些方便的实用方法,您可以在将来的所有类似情况下重复使用。
关于android - 如何解析从 EditText 到 TextView 的 double ? (安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474319/