Java Android-如何阻止表单将null保存到我的数据库
所以我写的表单有两个字段,一个主体和一个标题。我希望表单在这些字段不包含数据时抛出toast消息,以防止用户将其保存到数据库中。代码应该做三件事之一。第一个是我正在努力完成的。第二个是如果ID intent为null,它将创建一个新条目,如果ID intent有内容,它将用新内容更新数据库条目。我遇到的问题是,当表单字段为空时,它仍然保存。它似乎完全跳过了我的第一个IF语句,我似乎不知道为什么。我尝试对第一个IF语句同时使用null和“”,既可以单独使用,也可以一起使用。帮忙Java Android-如何阻止表单将null保存到我的数据库,java,android,sqlite,Java,Android,Sqlite,所以我写的表单有两个字段,一个主体和一个标题。我希望表单在这些字段不包含数据时抛出toast消息,以防止用户将其保存到数据库中。代码应该做三件事之一。第一个是我正在努力完成的。第二个是如果ID intent为null,它将创建一个新条目,如果ID intent有内容,它将用新内容更新数据库条目。我遇到的问题是,当表单字段为空时,它仍然保存。它似乎完全跳过了我的第一个IF语句,我似乎不知道为什么。我尝试对第一个IF语句同时使用null和“”,既可以单独使用,也可以一起使用。帮忙 submitB
submitBtn.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
String titleInsert = titleEdit.getText().toString();
String bodyInsert = bodyEdit.getText().toString();
String dateTimeValue = dateTimeTextView.getText().toString();
if ((titleInsert == null || titleInsert == "") || (bodyInsert == null || bodyInsert == "")){
Context context = getApplicationContext();
CharSequence text = "Please make sure the Title and Body are both filled before saving";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}else if(intentRowId == null){
try{
mDb.open();
mDb.createNote(Integer.parseInt(mIntentId), titleInsert, bodyInsert, dateTimeValue);
finish();
} catch (Exception e) {
e.printStackTrace();
}
} else {
try{
mDb.open();
mDb.updateNote(longRowId, titleInsert, bodyInsert);
finish();
} catch (Exception e){
e.printStackTrace();
Context context = getApplicationContext();
CharSequence text = "SQL Exception Thrown: " + e;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
}
});
尝试
标题插入等号(“”)
等
此外,您可能需要调用titleInsert=titleInsert.trim()
如果它不为null,则用于捕获空白字符串,如“
”
编辑:如果可以使用Apache commons lang,则可以使用类StringUtils
,该类具有isBlank()
方法,如果字符串为null、空或仅包含空格,则该方法返回true
编辑2:
关于标题的简短解释插入.equals(“”
:=
通常检查相同的对象,而不是相等数据。因此,titleInsert
和“
不一定是同一个对象,但可能是相等的(空字符串)。请注意,在处理(非空)对象时,几乎在所有情况下都应该使用equals
,除非您明确知道需要使用=
(除了检查obj==null
),否则这种情况很少见
简短的示例:new Long(1)=1L
可能会产生false,因为new Long(1)
创建了一个与用于文本1L
的Long对象不同的对象(还请注意,我使用1L排除了自动(取消)装箱)。另一方面,new Long(1).equals(1L)
将生成true。尝试:
titleInsert.equals("")
或
而不是
titleInsert == ""
您确定在输入第一个if语句时titleInsert实际上为null吗?我也遇到了同样的问题,但我的错误是调用者中的一个打字错误。使用.equals非常有效。我尝试了.isBlank(),但我的应用程序似乎没有将其识别为一种方法。不确定它是不是安卓系统内置的,还是我做错了什么。这一切还是新鲜事,非常感谢!正如我所说,
isBlank()
是类StringUtils
的一个方法,它是ApacheCommonsLang库的一部分。您需要添加该库才能使用该方法。
titleInsert == ""