Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击“无值”时出现计算器错误_Android_Android Studio - Fatal编程技术网

Android 单击“无值”时出现计算器错误

Android 单击“无值”时出现计算器错误,android,android-studio,Android,Android Studio,我需要帮助,我构建了计算器应用程序,但是当我单击没有值的add、sub或equal按钮时,该应用程序将崩溃。否则,如果我先插入值,则该应用程序将正常运行。帮助 相等按钮 FloatingActionButton fab = findViewById(R.id.fab); fab.bringToFront(); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View

我需要帮助,我构建了计算器应用程序,但是当我单击没有值的add、sub或equal按钮时,该应用程序将崩溃。否则,如果我先插入值,则该应用程序将正常运行。帮助

相等按钮

FloatingActionButton fab = findViewById(R.id.fab);
fab.bringToFront();
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Value2 = Float.parseFloat(ed1.getText() + "" );
        if (mAddition == true){
            ed1.setText(Value1 + Value2 +"");
            mAddition=false;
        }
        if (mSubtract == true){
            ed1.setText(Value1 - Value2 +"");
            mSubtract=false;
        }
    }
}); 
分接按钮

FloatingActionButton btn_Sub = findViewById(R.id.btn_Sub);
btn_Sub.bringToFront();
btn_Sub.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Value1 = Float.parseFloat(ed1.getText() + "");
        mSubtract = true ;
        ed1.setText("");
    }
});
添加按钮

FloatingActionButton btn_Add = findViewById(R.id.btn_Add);
btn_Add.bringToFront();
btn_Add.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (ed1 == null){
            ed1.setText("");
        }else {
            Value1 = Float.parseFloat(ed1.getText() + "");
            mAddition = true;
            ed1.setText("");
        }
    }
});
我该怎么办

这是我的日志

 04-29 22:27:18.861 10722-10722/afif.calfits V/FA: onActivityCreated
04-29 22:27:18.891 10722-10722/afif.calfits D/skia_ext: turboImageDecoder took 27.87ms to decode 1024x768 (1x downscale)
04-29 22:27:19.151 10722-10744/afif.calfits V/FA: Activity resumed, time: 5774739
04-29 22:27:19.151 10722-10744/afif.calfits D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=Food, firebase_previous_id(_pi)=-2803431669891477858, firebase_screen_class(_sc)=Dairy, firebase_screen_id(_si)=-8225789602144573450}]
04-29 22:27:20.261 10722-10722/afif.calfits D/AndroidRuntime: Shutting down VM
04-29 22:27:20.261 10722-10722/afif.calfits E/AndroidRuntime: FATAL EXCEPTION: main
                                                              Process: afif.calfits, PID: 10722
                                                              java.lang.NumberFormatException: Invalid float: ""
                                                                  at java.lang.StringToReal.invalidReal(StringToReal.java:63)
                                                                  at java.lang.StringToReal.parseFloat(StringToReal.java:308)
                                                                  at java.lang.Float.parseFloat(Float.java:306)
                                                                  at afif.calfits.Dairy$4.onClick(Dairy.java:95)
                                                                  at android.view.View.performClick(View.java:4756)
                                                                  at android.view.View$PerformClick.run(View.java:19761)
                                                                  at android.os.Handler.handleCallback(Handler.java:739)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                  at android.os.Looper.loop(Looper.java:135)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:5253)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at java.lang.reflect.Method.invoke(Method.java:372)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

您没有添加日志或错误,因此我无法准确了解您的错误或问题,但在显示代码后,我认为,这一行中的问题:-

在这里,您需要将.toString()与EditText.gettext()一起添加。

在中,相等的按钮替换此行

与Sub按钮中的相同

FloatingActionButton btn_Sub = findViewById(R.id.btn_Sub);
btn_Sub.bringToFront();
btn_Sub.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Value1 = Float.parseFloat(ed1.getText() + "");
        mSubtract = true ;
        ed1.setText("");
    }
});
与“添加”按钮中的相同

FloatingActionButton btn_Add = findViewById(R.id.btn_Add);
btn_Add.bringToFront();
btn_Add.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (ed1 == null){
            ed1.setText("");
        }else {
            Value1 = Float.parseFloat(ed1.getText() + "");
            mAddition = true;
            ed1.setText("");
        }
    }
});

我认为您的问题与
.toString()
无关,而与
NumberFormatException
无关

Float.parseFloat()
抛出
NumberFormatException− 如果字符串不包含可解析浮点。

因此,当您在edittext中什么都不放时,只会得到空字符串。空字符串不是可解析的数字,您得到了
NumberFormatException

为了更多的出轨

您可以执行以下操作:

分接按钮

FloatingActionButton btn_Sub = findViewById(R.id.btn_Sub);
btn_Sub.bringToFront();
btn_Sub.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Value1 = Float.parseFloat(ed1.getText() + "");
        mSubtract = true ;
        ed1.setText("");
    }
});

这是因为您试图解析的空字符串不是
Float.parseFloat()
方法的正确参数。从以下方面:

公共静态浮点解析浮点(字符串s)抛出NumberFormatException

返回初始化为指定字符串表示的值的新浮点值,由类float的valueOf方法执行

参数:
s—要分析的字符串。
返回:
由字符串参数表示的浮点值。
抛出:
NullPointerException-如果字符串为null
NumberFormatException-如果字符串不包含可解析浮点

您可以看到,如果字符串为null,该方法将抛出
NullPointerException
,如果字符串不是浮点,则抛出
NumberFormatException
。空字符串不是浮点数,因此您将收到
NumberFormatException

因此,您需要检查空字符串,并使用如下内容捕获错误:

String text = ed1.getText().toString();
float value;

// check if text is empty or not.
if(text.isEmpty()) {
  value = 0;
} else {
  try {
    value = Float.parseFloat(text);    
  } catch(NumberFormatException e) {
    // text is not a number, set it as 0.
    value = 0;
  }
}

你能发布logcat吗?好的,已经添加了,这就是我需要显示的logcat吗?这里是你的异常
E/AndroidRuntime:FATAL异常:主进程:afif.calfits,PID:10722 java.lang.NumberFormatException:Invalid float:“”在java.lang.StringToReal.invalidReal(StringToReal.java:63)在java.lang.StringToReal.parseFloat(StringToReal.java:308)
okay@AfifAmin然后您还可以设置编辑文本是否为空的条件?请出示我最近编辑的帖子。
FloatingActionButton btn_Sub = findViewById(R.id.btn_Sub);
btn_Sub.bringToFront();
btn_Sub.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            Value1 = Float.parseFloat(ed1.getText() + "");
            mSubtract = true ;
            ed1.setText("");
        } catch(NumberFormatException e) {
            Toast.makeText(YOUR_ACTIVITY_CLASS.this, "Invalid Number", Toast.LENGTH_LONG).show();
        }
    }
});
String text = ed1.getText().toString();
float value;

// check if text is empty or not.
if(text.isEmpty()) {
  value = 0;
} else {
  try {
    value = Float.parseFloat(text);    
  } catch(NumberFormatException e) {
    // text is not a number, set it as 0.
    value = 0;
  }
}