由于运行时错误,无法显示Toast

时间:2016-03-06 06:56:28

标签: java android

badd.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String s1 = e1.getText()+"hi".toString();
            Log.i("add",s1);
            if(e1.getText()==null)
            {
                Toast.makeText(getApplicationContext(), "Please Enter A Number First", Toast.LENGTH_SHORT).show();
            }
            else
            {
                num1 = Float.parseFloat(e1.getText()+"");
                i=1;
                e1.setText(null);
            }
        }
    });

我正在制作一个简单的计算器应用程序,有一个Button badd(执行添加的按钮)和一个EditText e1。单击此按钮时;首先,如果文本框为空,则检查它是否为空它是否显示Toast告诉用户输入数字。如果已输入该号码,则该号码将存储在变量num1中,并且文本框将变为空,以便用户可以输入另一个号码,并且将对这两个号码执行添加。

当我输入一个数字并按下badd添加成功完成。但我的问题是,当我将编辑文本框留空(空)时,我得到一个运行时错误,而不是显示吐司,它显示错误"您的应用程序很遗憾地关闭"。

我创建了一个字符串变量s1,它接受在e1中输入的字符串,并将该字符串与另一个字符串连接起来" hi"这样如果字符串为空,它至少会在log cat中显示hi消息。它是检查匿名内部类中是否存在某些错误。但是已经清除了匿名内部类和其他阻塞没有问题。

我认为bug存在于if块中。请帮我!以下是我的LogCat错误,可以帮助您找到错误。

03-05 16:37:00.601: I/add(1569): hi

03-05 16:37:00.663: E/AndroidRuntime(1569): FATAL EXCEPTION: main

03-05 16:37:00.663: E/AndroidRuntime(1569): java.lang.NumberFormatException: Invalid float: ""

03-05 16:37:00.663: E/AndroidRuntime(1569):     at java.lang.StringToReal.invalidReal(StringToReal.java:63)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at java.lang.StringToReal.parseFloat(StringToReal.java:289)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at java.lang.Float.parseFloat(Float.java:300)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at com.example.mycalculator.MainActivity$13.onClick(MainActivity.java:171)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at android.view.View.performClick(View.java:4202)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at android.view.View$PerformClick.run(View.java:17340)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at android.os.Handler.handleCallback(Handler.java:725)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at android.os.Handler.dispatchMessage(Handler.java:92)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at android.os.Looper.loop(Looper.java:137)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at android.app.ActivityThread.main(ActivityThread.java:5039)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at java.lang.reflect.Method.invokeNative(Native Method)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at java.lang.reflect.Method.invoke(Method.java:511)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

03-05 16:37:00.663: E/AndroidRuntime(1569):     at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:1)

根据javadoc for parseFloat,如果字符串不能被解释为浮点数,则它会抛出NumberFormatException。因此,您应该通过捕获该异常并执行其他操作来处理该情况:

#include <stdio.h>

int main()
{
  printf("Printing quotation mark \")\" ");
}

答案 1 :(得分:0)

尝试使用if块:

if(e1.getText().toString().equals(""))

希望这会对你有所帮助.. :)