无法在我的应用程序中将 String 解析为 Float
Cannot parse a String into Float in my app
起初我是 android 开发的新手。我试图制作这个小应用程序,我想从用户那里获取输入并将它们显示到(默认)列表视图。当我在所有字段中输入值时,它工作正常,但当我将 CGPA 字段保持为空时,它停止了。不幸的是,MyApp 已停止
Here is the OnClickListener login button.
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setData();
}
});
我猜这是 setData() 方法中出现问题的行。
我的问题是 "Is it a right approach to parse data?"
Float cgpa = Float.parseFloat(editTextCgpa.getText().toString());
if(cgpa<=4.00 && cgpa > 0.00 ){
student.setCgpa(cgpa);
}
else{
error = true;
editTextCgpa.setError("CGPA must be within 4 in scale");
}
Android 监视器:
这是我在 android 监视器中发现的错误消息。
11-25 13:06:18.917 7896-7896/com.ariful.lict.lictpractice E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NumberFormatException: Invalid float: ""
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.parseFloat(StringToReal.java:289)
at java.lang.Float.parseFloat(Float.java:300)
at com.ariful.lict.lictpractice.MainActivity.setData(MainActivity.java:55)
at com.ariful.lict.lictpractice.MainActivity.onClick(MainActivity.java:45)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
这是将 String 转换为 Float 导致错误的原因吗??
有没有人可以帮助我?
您传递的是要解析的空字符串...
只需更改您的代码以检查 null/empty String
。
if(!editTextCgpa.getText().toString().isEmpty()){
Float cgpa = Float.parseFloat(editTextCgpa.getText().toString());
if(cgpa<=4.00 && cgpa > 0.00 ){
student.setCgpa(cgpa);
}
else{
error = true;
editTextCgpa.setError("CGPA must be within 4 in scale");
}
}
起初我是 android 开发的新手。我试图制作这个小应用程序,我想从用户那里获取输入并将它们显示到(默认)列表视图。当我在所有字段中输入值时,它工作正常,但当我将 CGPA 字段保持为空时,它停止了。不幸的是,MyApp 已停止
Here is the OnClickListener login button.
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setData();
}
});
我猜这是 setData() 方法中出现问题的行。 我的问题是 "Is it a right approach to parse data?"
Float cgpa = Float.parseFloat(editTextCgpa.getText().toString());
if(cgpa<=4.00 && cgpa > 0.00 ){
student.setCgpa(cgpa);
}
else{
error = true;
editTextCgpa.setError("CGPA must be within 4 in scale");
}
Android 监视器:
这是我在 android 监视器中发现的错误消息。
11-25 13:06:18.917 7896-7896/com.ariful.lict.lictpractice E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NumberFormatException: Invalid float: ""
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.parseFloat(StringToReal.java:289)
at java.lang.Float.parseFloat(Float.java:300)
at com.ariful.lict.lictpractice.MainActivity.setData(MainActivity.java:55)
at com.ariful.lict.lictpractice.MainActivity.onClick(MainActivity.java:45)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
这是将 String 转换为 Float 导致错误的原因吗?? 有没有人可以帮助我?
您传递的是要解析的空字符串...
只需更改您的代码以检查 null/empty String
。
if(!editTextCgpa.getText().toString().isEmpty()){
Float cgpa = Float.parseFloat(editTextCgpa.getText().toString());
if(cgpa<=4.00 && cgpa > 0.00 ){
student.setCgpa(cgpa);
}
else{
error = true;
editTextCgpa.setError("CGPA must be within 4 in scale");
}
}