从编辑文本中检索值并计算总计

时间:2013-10-08 11:31:44

标签: android android-intent android-activity android-edittext android-button

我正在尝试从编辑文本中获取值并尝试计算并将其放在textview中。但是我在从double转换为字符串时遇到错误。

这是我的编辑文本代码:

<EditText
     android:id="@+id/c"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:ems="10"
     android:gravity="center"
     android:inputType="number" >
    <requestFocus />
</EditText>
<EditText
            android:id="@+id/b"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:gravity="center"
            android:inputType="number" >

            <requestFocus />
        </EditText>
<EditText
    android:id="@+id/a"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:gravity="center"
    android:inputType="number" >
    <requestFocus />
</EditText>

这是我的Activity类:

a= (EditText) findViewById(R.id.a);
b= (EditText) findViewById(R.id.b);
c= (EditText) findViewById(R.id.c);
String aa= a.getText().toString();
String bb= b.getText().toString();
String cc= c.getText().toString();
Double total= (Double.valueOf(aa)*Double.valueOf(bb)) + (Double.valueOf(aa)*Double.valueOf(cc)) ;
totalbill = Double.toString(total);
Button submitbutn = (Button) findViewById(R.id.submitbutton);
submitbutn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {       
            d.setText(totalbill);
        }
    });
}

错误日志是:

10-08 07:27:58.115: E/AndroidRuntime(1909): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vat.calculator/com.vat.calculator.Home}: java.lang.NumberFormatException: Invalid double: ""
10-08 07:27:58.115: E/AndroidRuntime(1909):     at java.lang.Double.parseDouble(Double.java:295)
10-08 07:27:58.115: E/AndroidRuntime(1909):     at java.lang.Double.valueOf(Double.java:332)
10-08 07:27:58.115: E/AndroidRuntime(1909):     at java.lang.StringToReal.invalidReal(StringToReal.java:63)
10-08 07:27:58.115: E/AndroidRuntime(1909):     at java.lang.StringToReal.parseDouble(StringToReal.java:248)

7 个答案:

答案 0 :(得分:1)

试试这个代码......

    a= (EditText) findViewById(R.id.a);
    b= (EditText) findViewById(R.id.b);
    c= (EditText) findViewById(R.id.c);

    Button submitbutn = (Button) findViewById(R.id.submitbutton);
    submitbutn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            String aa= a.getText().toString();
            String bb= b.getText().toString();
            String cc= c.getText().toString();

            double aDouble = aa.length() > 0 ? Double.valueOf(aa) : 0;
            double bDouble = bb.length() > 0 ? Double.valueOf(bb) : 0;
            double cDouble = cc.length() > 0 ? Double.valueOf(cc) : 0;

            Double total= (aDouble * bDouble) + (aDouble * cDouble) ;
            totalbill = Double.toString(total);

            d.setText(totalbill);
        }
    });

答案 1 :(得分:0)

在Double.parse之前,请检查字符串是否为空。

if(aa != null && aa.length() > 0){
   Double.parse(aa);
}

答案 2 :(得分:0)

更改此行

totalbill = Double.toString(total);

totalbill = total.toString();

对结果进行评论

答案 3 :(得分:0)

您可以尝试使用parseDouble();

Double total= (Double.parseDouble(aa)*Double.parseDouble(bb))...

然后检查aa!=null bb!=nullcc!=null,而不是空

答案 4 :(得分:0)

尝试以下代码:

 if(aa != null && aa.length() > 0 && bb ! = null && bb.length>0 && cc!=null && cc.length>0){
        Double total= ((Double.parseDouble(aa))*(Double.parseDouble(bb)) + ((Double.parseDouble(aa))*(Double.parseDouble(cc)) ;
    }

答案 5 :(得分:0)

您的应用可能会抛出空指针异常。所以为了避免这种情况,试试这个:

if(aa != null && aa.length() > 0 && bb ! = null && bb.length>0 && cc!=null && cc.length>0){
        Double total= ((Double.parseDouble(aa))*(Double.parseDouble(bb)) + ((Double.parseDouble(aa))*(Double.parseDouble(cc)) ;
    }

答案 6 :(得分:0)

修剪字符串并解析为double并检查字符串的长度是否为空

if(aa != null && aa.trim().length() > 0){
  Double.valueOf(aa.trim())
}