0

所以基本上我有问题。当用户在未输入值的情况下按下计算按钮(我正在制作计算器)时,应用程序会崩溃。我希望它显示一条消息,但我不知道如何。(更新)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.waist2height); {
        //h is cm edittext 
        final EditText h = (EditText)findViewById(R.id.editText2);
        final EditText w = (EditText)findViewById(R.id.editText3);

        final EditText r = (EditText)findViewById(R.id.textView4);

    });

        calculate.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                // TODO Auto-generated method stub

            float height=0;
            float weight=0;
            float result=0;



            result = (float) (( weight / height ) + 0.005) ;

            if ((h.getText().toString()).equals(""))
                {
                   Toast.makeText(getApplicationContext(),"Please enter your height", Toast.LENGTH_SHORT).show();
                   float height = Float.parseFloat(h.getText().toString());
                }
                if ((w.getText().toString()).equals(""))
                {
                   Toast.makeText(getApplicationContext(),"Please enter your weight", Toast.LENGTH_SHORT).show();
                   float weight = Float.parseFloat(w.getText().toString());
                }


            r.setText(String.valueOf(result));
            }

下面的代码是我遇到问题的地方

if ((h.getText().toString()).equals(""))
                {
                   Toast.makeText(getApplicationContext(),"Please enter your height", Toast.LENGTH_SHORT).show();
                   float height = Float.parseFloat(h.getText().toString());
                }
                if ((w.getText().toString()).equals(""))
                {
                   Toast.makeText(getApplicationContext(),"Please enter your weight", Toast.LENGTH_SHORT).show();
                   float weight = Float.parseFloat(w.getText().toString());
                }

这是我能想到的最好的,但它不起作用。

这是 LogCat(更新)

    09-20 18:50:38.509: E/AndroidRuntime(29769): FATAL EXCEPTION: main
09-20 18:50:38.509: E/AndroidRuntime(29769): Process: com.NovaPlex.personalfitnessfree, PID: 29769
09-20 18:50:38.509: E/AndroidRuntime(29769): java.lang.NumberFormatException: Invalid float: ""
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.StringToReal.invalidReal(StringToReal.java:63)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.StringToReal.parseFloat(StringToReal.java:308)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.Float.parseFloat(Float.java:306)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at com.NovaPlex.personalfitnessfree.WH$2.onClick(WH.java:80)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.view.View.performClick(View.java:4780)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.view.View$PerformClick.run(View.java:19866)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.os.Handler.handleCallback(Handler.java:739)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.os.Handler.dispatchMessage(Handler.java:95)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.os.Looper.loop(Looper.java:135)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.app.ActivityThread.main(ActivityThread.java:5254)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.reflect.Method.invoke(Native Method)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.reflect.Method.invoke(Method.java:372)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
4

4 回答 4

1

你可以试试这个,检查是否没有在EditText.

if ((EditText1.getText().toString()).equals(""))
{
   Toast.makeText(getApplicationContext(),"Please enter Value1", Toast.LENGTH_LONG).show();
}
if ((EditText2.getText().toString()).equals(""))
{
   Toast.makeText(getApplicationContext(),"Please enter Value2", Toast.LENGTH_LONG).show();
}

或者,您可以使用.matches("")而不是.equals("")

更新

你必须这样做

if (!(h.getText().toString()).equals(""))
{
   height= Float.parseFloat(h.getText().toString());
}

if (!(w.getText().toString()).equals(""))
{
   weight= Float.parseFloat(w.getText().toString());
}

更新

if ((EditText1.getText().toString()).equals(""))
{
   Toast.makeText(getApplicationContext(),"Please enter Value1", Toast.LENGTH_LONG).show();
}
if ((EditText2.getText().toString()).equals(""))
{
   Toast.makeText(getApplicationContext(),"Please enter Value2", Toast.LENGTH_LONG).show();
}
if (!(h.getText().toString()).equals(""))
{
   height= Float.parseFloat(h.getText().toString());
}
if (!(w.getText().toString()).equals(""))
{
   weight= Float.parseFloat(w.getText().toString());
}

替换上面的代码而不是你的

于 2015-09-13T16:55:57.860 回答
1

不要使用== null. 假设你已经完成findviewbyid,它不能为空。它不检查内容。

这是一个如何查找 EditText 是否为空的简单方法。参数是您要检查的 EditText,它返回true空/false非空。

private boolean isEmpty(EditText etText) {
    return etText.getText().toString().trim().length() <= 0;
}

编辑 :

通过android:id="@+id/someId在 xml 文件中使用,我们告诉 AndroidsomeId在我们的R.java类中创建具有所选 id(在本例中)的新资源。这样做时,findviewbyid我们将该值分配给我们的视图。

简而言之,如果 OPEditText EditText1 = (EditText) findViewById(R.id.myFistEditText);之前做过类似的事情,后来他尝试在他的iflike中进行比较(EditText1 == null),它实际上并没有在他的 EditText 中获得文本的价值,它只是告诉他 - 是的,这个视图是之前找到的并且它被分配了。

于 2015-09-13T16:52:15.393 回答
0

已经说过你最好写一个方法isEmpty

isEmpty我的建议是编写一个名为isValid检查值是否为所需值(即整数、双精度等)的方法,而不是编写一个方法。

这样你的程序在输入字符串时不会崩溃。

于 2015-09-13T19:09:03.713 回答
0

利用

if(textView.getText().toString().isEmpty()){
      Toast.makeText(this , "Enter A Number" , Toast.LENGTH_SHORT).show();
}
于 2021-01-23T06:20:53.130 回答