0

我试图从编辑文本中获取值,并尝试将其计算并将其置于textview中。但即时通讯转换为双字符串时出现错误。从编辑文本中检索值并计算总数

这是我的编辑文本代码:

<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) 
+0

使用'Double.parseDouble(“你的字符串值”)'; – BBdev

+0

如果你不会在EditText中输入任何数字,然后点击提交按钮,那么空格将转换为数字,这就是为什么你会得到[NumberFormatException](http://developer.android.com/reference/java/lang/NumberFormatException.html) ,在将String解析为Double之前,请检查我的答案如何验证。 –

回答

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

我所做的错误是我在oncreate方法中调用Edittext,这是废话。谢谢@vishesh chandra来标记我。 :) –

0

之前Double.parse请羯羊该字符串不是空的。

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

改变这一行

totalbill = Double.toString(total); 

totalbill = total.toString(); 

评论我,结果

0

您可以parseDouble()尝试;

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

并检查aa!=nullbb!=nullcc!=null,而不是空

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

修剪字符串和解析将翻一番,检查字符串的长度不为空

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