gpt4 book ai didi

java - 当用户未输入值时如何阻止程序崩溃?

转载 作者:行者123 更新时间:2023-12-02 04:22:50 25 4
gpt4 key购买 nike

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

@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)

最佳答案

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

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

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

编辑:

通过在 xml 文件中使用 android:id="@+id/someId ,我们告诉 Android 使用选定的 id(在本例中为 someId)创建新资源我们的 R.java 类。在执行 findviewbyid 时,我们将该值分配给我们的 View。

简而言之,如果 OP 之前做了类似 EditText EditText1 = (EditText) findViewById(R.id.myFistEditText); 的事情,然后他尝试在他的 if 中进行比较就像 (EditText1 == null) 一样,它实际上并没有获取 EditText 中的文本值,它只是告诉他 - 是的,这个 View 之前已找到并已分配。

关于java - 当用户未输入值时如何阻止程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32552018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com