Android 如何确保edittext字段不为空?
我有两个edittext字段,其中需要项目名称(字符串)和数量(整数)。如果用户在两个字段上都没有输入任何内容,或者即使只有一个字段是空的,我想展示一个祝酒词,上面写着“请输入商品”或“请输入数量”。它会产生错误。以下是片段:Android 如何确保edittext字段不为空?,android,android-edittext,toast,Android,Android Edittext,Toast,我有两个edittext字段,其中需要项目名称(字符串)和数量(整数)。如果用户在两个字段上都没有输入任何内容,或者即使只有一个字段是空的,我想展示一个祝酒词,上面写着“请输入商品”或“请输入数量”。它会产生错误。以下是片段: public void onClick(DialogInterface dialog, int id) { String item = itemET.getText().toString();
public void onClick(DialogInterface dialog, int id) {
String item = itemET.getText().toString();
int quantity = Integer.parseInt(quantityET.getText().toString());
if(itemET.equals("")){
Toast t =Toast.makeText(GroceryList.this, "Please enter item", 5000);
t.show();
}
if(quantityET.equals("")){
Toast t =Toast.makeText(GroceryList.this, "Please enter quantity or enter 0 if none", 5000);
t.show();
}
下面是logcat中的错误:
09-19 10:01:51.766: E/AndroidRuntime(527): FATAL EXCEPTION: main
09-19 10:01:51.766: E/AndroidRuntime(527): java.lang.NumberFormatException: unable to parse '' as integer
09-19 10:01:51.766: E/AndroidRuntime(527): at java.lang.Integer.parseInt(Integer.java:362)
09-19 10:01:51.766: E/AndroidRuntime(527): at java.lang.Integer.parseInt(Integer.java:332)
09-19 10:01:51.766: E/AndroidRuntime(527): at com.mexican.recipes.GroceryList$1$1.onClick(GroceryList.java:60)
09-19 10:01:51.766: E/AndroidRuntime(527): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
09-19 10:01:51.766: E/AndroidRuntime(527): at android.os.Handler.dispatchMessage(Handler.java:99)
09-19 10:01:51.766: E/AndroidRuntime(527): at android.os.Looper.loop(Looper.java:123)
09-19 10:01:51.766: E/AndroidRuntime(527): at android.app.ActivityThread.main(ActivityThread.java:3683)
09-19 10:01:51.766: E/AndroidRuntime(527): at java.lang.reflect.Method.invokeNative(Native Method)
09-19 10:01:51.766: E/AndroidRuntime(527): at java.lang.reflect.Method.invoke(Method.java:507)
09-19 10:01:51.766: E/AndroidRuntime(527): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-19 10:01:51.766: E/AndroidRuntime(527): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-19 10:01:51.766: E/AndroidRuntime(527): at dalvik.system.NativeStart.main(Native Method)
创建EditText时,请声明
android:inputType=“number”
property init仅接受数值
public void onClick(DialogInterface dialog, int id)
{
String item;
int quantity;
if ( itemET != null )
{
item = itemET.getText().toString();
}
if ( quantityET != null && quantityET.getText().toString().trim().length() > 0 )
{
quantity = Integer.parseInt(quantityET.getText().toString().trim()); // trim() method added when converting String to Integer
}
if(itemET.getText().trim().equals("")) // Modification done here
{
Toast t =Toast.makeText(GroceryList.this, "Please enter item", 5000);
t.show();
}
if(quantityET.getText().trim().equals("")) // Modification done here
{
Toast t =Toast.makeText(GroceryList.this, "Please enter quantity or enter 0 if none", 5000);
t.show();
}
}
以上两个答案都不好,因为:
String item = itemET.getText().toString();
如果需要,您应该在这里检查项
,但这一行中没有崩溃
int quantity = Integer.parseInt(quantityET.getText().toString());
这就是问题所在,因为quantityET
有一个空字符串,并且它没有被检查
有两种解决方案:
一种是检查quantityET.getText()
是否不为null,长度是否大于0
第二个是为Integer.parseInt(value)
我将结合以下两个方面:
String quantity = quantityET.getText().toString();
if(quantity != null && quantity.length() > 0){
try{
int iQuantity = Integer.parseInt(quantityET.getText().toString());
}catch(NumberFormatException nfe){
Log.e("your tag", e);
}
}
希望有帮助。这段代码中有两个不同的问题:对空字符串调用parseInt将引发异常(您看到的错误),并且您正在对EditText对象本身而不是其中包含的字符串进行.equals比较。请执行以下操作:
public void onClick(DialogInterface dialog, int id) {
String itemString = itemET.getText().toString();
String quantityString = quantityET.getText().toString();
int quantity;
if(itemString.equals(""))
{
Toast t =Toast.makeText(GroceryList.this, "Please enter item", 5000);
t.show();
}
if(quantityString.equals("")){
Toast t =Toast.makeText(GroceryList.this, "Please enter quantity or enter 0 if none", 5000);
t.show();
}
else {
quantity = Integer.parseInt(quantityString);
}
}
如果您提供的不是数字(例如,如果您在框中键入“a”),但它应该能够处理输入的任何内容,则此操作仍会崩溃。请尝试以下操作:
public void onClick(DialogInterface dialog, int id) {
int quantity;
String item;
if(itemET.getTExt.toString().trim()!="") {
item = itemET.getText().toString();
} else {
Toast t =Toast.makeText(GroceryList.this, "Please enter item", 5000);
t.show();
}
if(quantityET.getText().toString().trim()!="") {
quantity = Integer.parseInt(quantityET.getText().toString().trim());
} else {
Toast t =Toast.makeText(GroceryList.this, "Please enter quantity or enter 0 if none", 5000);
t.show();
}
请注意,您可以使用setError(“error”) 非常有帮助的回答。。现在可以用了。。非常感谢你!注意:他所描述的崩溃是由调用空字符串
'
的parseInt
引起的。intquantity=…
行应该位于第二个if语句中,以便解决崩溃问题。还有,第一个if语句不能只解析item.trim().equals(“”
?@Xono,如果您阅读我的答案代码,我同意在将字符串转换为整数时使用trim()方法。如何防止崩溃尝试解析空字符串?不是:如果(quantityET!=null)它从不为null,因为它是一个int,而不是一个object,Trooll+1表示干净的代码,但quantity=Integer.parseInt(“a”);将使代码崩溃:)和why Integer.parseInt(quantityString);关于if(quantityString.equals(“”)?:)Oops被搞混了,也习惯于为不是空字符串编写检查:P将立即修复@Xono,我确实使用了Lucifer的第一个代码,他在其中声明quantity=0;这使得我的应用程序在未输入任何内容的情况下将integer设置为默认值0。他删除了那个答案。但这对我来说已经足够好了。。但在检查代码后,它会更好,因为它确实显示了我想要的祝酒词。但它会自动从alertdialog中出来。当alertdialog仍然存在时,这些toast还会显示吗?如果您在onClick
方法中使用对dislose()
的调用,只需在两行读取t.show()
之后放置一个return
调用(但仍在If语句中)。如果您在其他地方有一个disclose()
调用,请发布调用它的代码。如果您根本没有disclease()
方法,请告诉我:P@Xono我没有disclease();为什么OP要“试试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。
if(editText.getText().toString().length()==0)
Toast.makeText(Registration.this, "Plz Enter Your name", Toast.LENGTH_LONG).show();
else if (editText1.getText().toString().length() == 0)
Toast.makeText(Registration.this, "plz enter mobile no.", Toast.LENGTH_LONG).show();
else {
Intent i = new Intent(getApplicationContext(), MainActivity.class);
startActivity(i);
finish();
}