Android 当第三个文本为空时,从第二个edittext获取文本
我有一个带有3个编辑文本和按钮的活动。用户可以填写两个edittext(edittext 1和2或1和3)。始终有一个编辑文本(第二个或第三个)必须为空。点击后按钮显示正确的结果。我不知道如何更改我的代码。如果我的edittext为空,应用程序会意外停止。如果我将值0插入到“不使用edittext”,则一切正常。有人有什么想法吗?如何解决这个问题?非常感谢你的帮助。 这是我的主要活动代码:Android 当第三个文本为空时,从第二个edittext获取文本,android,android-edittext,Android,Android Edittext,我有一个带有3个编辑文本和按钮的活动。用户可以填写两个edittext(edittext 1和2或1和3)。始终有一个编辑文本(第二个或第三个)必须为空。点击后按钮显示正确的结果。我不知道如何更改我的代码。如果我的edittext为空,应用程序会意外停止。如果我将值0插入到“不使用edittext”,则一切正常。有人有什么想法吗?如何解决这个问题?非常感谢你的帮助。 这是我的主要活动代码: public class Glowna extends Activity implements On
public class Glowna extends Activity implements OnClickListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
View button1Button = this.findViewById(R.id.oblicz);
button1Button.setOnClickListener(this);
}
public void onClick(View v){
EditText numa = (EditText)findViewById(R.id.a);
EditText numb = (EditText)findViewById(R.id.b);
EditText numc = (EditText)findViewById(R.id.c);
float eq1 = 0;
float eq2 = 0;
float eq3 = 0;
float eq4 = 0;
float num1 = Float.parseFloat(numa.getText().toString());
float num2 = Float.parseFloat(numb.getText().toString());
float num3 = Float.parseFloat(numc.getText().toString());
if (num1>0 & num2>0){
try{
switch (v.getId()) {
case R.id.oblicz:
eq1 = 4*num1;
eq2 = num1*num2;
break; }
String wynik1 = Float.toString(eq1);
String wynik2 = Float.toString(eq2);
Intent i = new Intent(this, Wynik.class);
i.putExtra("a",wynik1);
i.putExtra("b",wynik2);
startActivity(i); }
catch (NumberFormatException e) {Intent o = new Intent(this, Komunikat.class);
startActivity(o); return; }}
else if (num1>0&num3>0){
try{
switch (v.getId()) {
case R.id.oblicz:
eq4 = 4*num1;
eq3 = (num3/2)*num3;
break; }
String wynik4 = Float.toString(eq4);
String wynik3 = Float.toString(eq3);
Intent j = new Intent(this, Wynik1.class);
j.putExtra("d",wynik4);
j.putExtra("c",wynik3);
startActivity(j); }
catch (NumberFormatException e) {Intent o = new Intent(this, Komunikat.class);
startActivity(o);
return;}}
else {Intent o = new Intent(this, Komunikat.class);
startActivity(o);}
}}
和错误:
E/AndroidRuntime(249): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(249): java.lang.NumberFormatException:
E/AndroidRuntime(249): at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:296)
E/AndroidRuntime(249): at java.lang.Float.parseFloat(Float.java:327)
E/AndroidRuntime(249): at arek.gemetrytesty.glowna.Glowna.onClick(Glowna.java:38)
E/AndroidRuntime(249): at android.view.View.performClick(View.java:2344)
E/AndroidRuntime(249): at android.view.View.onTouchEvent(View.java:4133)
E/AndroidRuntime(249): at android.widget.TextView.onTouchEvent(TextView.java:6510)
E/AndroidRuntime(249): at android.view.View.dispatchTouchEvent(View.java:3672)
E/AndroidRuntime(249): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
E/AndroidRuntime(249): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
E/AndroidRuntime(249): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
E/AndroidRuntime(249): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
E/AndroidRuntime(249): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712)
E/AndroidRuntime(249): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202)
E/AndroidRuntime(249): at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
E/AndroidRuntime(249): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
E/AndroidRuntime(249): at android.view.ViewRoot.handleMessage(ViewRoot.java:1658)
E/AndroidRuntime(249): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(249): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(249): at android.app.ActivityThread.main(ActivityThread.java:4203)
E/AndroidRuntime(249): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(249): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(249): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
E/AndroidRuntime(249): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
E/AndroidRuntime(249): at dalvik.system.NativeStart.main(Native Method)
要捕获
java.lang.NumberFormatException
,请尝试以下操作:
float num1 = Float.parseFloat(numa.getText().toString());
float num2;
float num3;
try {
num2 = Float.parseFloat(numb.getText().toString());
} catch (Exception e) {
num2 = 0;
}
try {
num3 = Float.parseFloat(numc.getText().toString());
} catch (Exception e) {
num3 = 0;
}
而不是这个片段:
float num1 = Float.parseFloat(numa.getText().toString());
float num2 = Float.parseFloat(numb.getText().toString());
float num3 = Float.parseFloat(numc.getText().toString());
对于这种代码格式,理解某些东西是一件痛苦的事情。如果应用程序强制关闭,您应该发布错误日志。我认为您应该检查numa、NUB和numc中是否存在任何内容。然后仅对那些包含值的2尝试Float.parseFloat。并用某物初始化num1 num 2 num3,可能是0。@user978758您得到的是NumberFormatException(),因为您没有在其中一个EditText(即num2/num3)中插入值。因此,尝试用不同的逻辑实现代码。:)