2015-10-27 207 views
1

我有一个editText(称为输入),其中用户输入一个值,然后选择一个单选按钮将该值转换为不同的度量单位。我正在尝试设置一个if语句,以便在未选中单选按钮并且edittext为空的情况下显示一条文本消息,但它会使程序崩溃!检查editText是否为空

public void startCalculation() { 
    RadioGroup rg = (RadioGroup)findViewById(R.id.radioGroup); 
    int selectedConversion = rg.getCheckedRadioButtonId(); 
    double input = Double.parseDouble(((EditText) findViewById(R.id.currentSpeed)).getText().toString()); 
    double speed = 0; 
    String measurement = ""; 
    System.out.println("The Value of Input is: " + input); 

    //If its 0 then no unit has been selected 
    if(selectedConversion != -1 && input > 0) { 

任何想法什么导致程序崩溃?

编辑:下面是日志:

10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime: FATAL EXCEPTION: main 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime: Process: com.example.dan14.windproject, PID: 2058 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime: java.lang.NumberFormatException: Invalid double: "" 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at java.lang.Double.parseDouble(Double.java:301) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at com.example.dan14.windproject.MainActivity.startCalculation(MainActivity.java:88) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at com.example.dan14.windproject.MainActivity$2.onClick(MainActivity.java:49) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at android.view.View.performClick(View.java:5198) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at android.view.View$PerformClick.run(View.java:21147) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at android.os.Handler.handleCallback(Handler.java:739) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:95) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
10-27 13:39:02.357 2058-2058/com.example.dan14.windproject E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+1

什么是errormessage的?请向我们展示onCreate方法。顺便说一下, –

+0

和日志请 – AsfK

+0

。如果您的editText为空,则必须导致NumberFormatException –

回答

2

问题是这行代码:

double input = Double.parseDouble(((EditText) findViewById(R.id.currentSpeed)).getText().toString()); 

你传递一个空字符串,并导致一个NumberFormatException的像你的情况。

使其与代码更易读:

public void startCalculation() { 
    RadioGroup rg = (RadioGroup)findViewById(R.id.radioGroup); 
    int selectedConversion = rg.getCheckedRadioButtonId(); 
    String lInputString = ((EditText) findViewById(R.id.currentSpeed)).getText().toString(); 
    double input = 0; 
    if (!lInputString.trim().equals("")){ 
     input = Double.parseDouble(lInputString); 
    } 
    double speed = 0; 
    String measurement = ""; 
    System.out.println("The Value of Input is: " + input); 

    //If its 0 then no unit has been selected 
    if(selectedConversion != -1 && input > 0) { 
+0

啊!好。那么我如何在if语句中通过这个呢? – Haldamir

+0

看到我更新的答案。 –

+1

完美地工作!谢谢! – Haldamir

0

String是空的,所以当你尝试分析它有一个错误。检查字符串不是空

String text = ((EditText) findViewById(R.id.currentSpeed)).getText().toString(); 

if(!text.isEmpty()) { 
    double input = Double.parseDouble(text); 
} 

或捕捉NumberFormatException的

try { 
    double input = Double.parseDouble(((EditText) findViewById(R.id.currentSpeed)).getText().toString()); 
} catch(NumberFormatException e) { 
    //Error during parse 
} 
0
public void startCalculation() { 
RadioGroup rg = (RadioGroup)findViewById(R.id.radioGroup); 
int selectedConversion = rg.getCheckedRadioButtonId(); 
try{ 
double input = Double.parseDouble(((EditText) findViewById(R.id.currentSpeed)).getText().toString()); 
}catch(Exception e) 
{ 
//if catch block is execute it means edittext is empty 
} 
double speed = 0; 
String measurement = ""; 
System.out.println("The Value of Input is: " + input); 

//If its 0 then no unit has been selected 
if(selectedConversion != -1 && input > 0) { 
+0

看到try catch块,如果edittext null,那么你可以在catch块中编写代码 –