android - 如何解析从 EditText 到 TextView 的 double ? (安卓)

标签 android parsing variables textview android-edittext

我真的开始学习 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/

相关文章:

java - 读取 Android Spring 拦截器中的响应主体

android - 如何在 Android MapView 中显示数千个 OverlayItems

c++ - boost spirit 莱克斯和气。集成跳过解析器

javascript - 函数 Javascript || 的 NaN 返回值函数执行顺序

ios - 为每个实例更改 UITableViewCell 的宽度约束的常量值

android - 何时调用 GPS 重置

javascript - Cordova compass API (navigator.compass.watchHeading) 不起作用(错误代码 3)

c# - 从 xml REST POST webResponse 解析 C# 中的 XML

python - 解析python中的嵌套函数

Javascript - 返回变量失败