如何解决这个Null指针异常?

时间:2013-01-31 17:11:52

标签: android android-emulator

我在principal==0.0收到错误,我不明白为什么会这样。

if(et1.getText()!=null) {
    try {
        principal = Double.valueOf(et1.getText().toString());
}
catch(Exception e) {
    message = "Incorrect value";
}
}
// The problem is in the if statement below!
if(principal==0.00) {
    message = "value cannot be zero";
    title = "error";
}

我得到的错误如下:

   01-31 22:21:37.700: E/AndroidRuntime(985): FATAL EXCEPTION: main
   01-31 22:21:37.700: E/AndroidRuntime(985):
   java.lang.NullPointerException 01-31 22:21:37.700:
   E/AndroidRuntime(985):   at
   com.compoundinterest.MainActivity$1.onClick(MainActivity.java:65)
   01-31 22:21:37.700: E/AndroidRuntime(985):   at
   android.view.View.performClick(View.java:2485) 01-31 22:21:37.700:
   E/AndroidRuntime(985):   at
   android.view.View$PerformClick.run(View.java:9080) 01-31
   22:21:37.700: E/AndroidRuntime(985):     at
   android.os.Handler.handleCallback(Handler.java:587) 01-31
   22:21:37.700: E/AndroidRuntime(985):     at
   android.os.Handler.dispatchMessage(Handler.java:92) 01-31
   22:21:37.700: E/AndroidRuntime(985):     at
   android.os.Looper.loop(Looper.java:123) 01-31 22:21:37.700:
   E/AndroidRuntime(985):   at
   android.app.ActivityThread.main(ActivityThread.java:3683) 01-31
   22:21:37.700: E/AndroidRuntime(985):     at
   java.lang.reflect.Method.invokeNative(Native Method)

导致此错误的原因是什么?如何解决?

4 个答案:

答案 0 :(得分:1)

试试这个:

// Declaration on top
Double principal=0.00;

使用此:

EditText et1 = (EditText) findViewById(R.id.myEdit);

if(!et1.getText().toString().equals("")) {
    try {
        principal = Double.parseDouble(et1.getText().toString());
    }
    catch(Exception e) {
        message = "Incorrect value";
    }
}

if(principal==0.00) {
    message = "value cannot be zero";
    title = "error";
}

答案 1 :(得分:0)

不知道更多,很难说。我的猜测是,如果et1.getText()== null,则从不初始化principal。

答案 2 :(得分:0)

valueOf期间发生异常时,您的变量principal将不会被设置。并且comparsion将抛出NullPointerException,因为它是自动取消装箱principal到double,不能为null。

因此它应该是

if (principal == null) {
  // error handling
} else if (principal==0.00) {

并检查您在valueOf期间记录以前的例外情况。


我知道这是您遇到同样问题的第四个问题,而您刚从Kovge's answer复制了代码。如果你想了解给定的答案,你会学到更多。

以下是您的复制和粘贴方法的一些变体:

  1. 明确忽略空值:

    if (principal == null && principal==0.00) {
    
  2. 使用双打忽略空值:

    if (Double.valueOf(0.0).equals(principal)) {
    

答案 3 :(得分:0)

似乎校长为空。

执行此操作时。

if(principal==0.00)

实际上是

if(principal.doubleValue() ==0.00)

这导致nullPointer因为主体为空。

所以改成它:

if(principal ==null)
//return or do something
else if(principal ==0.00)