Android - 如何阻止表单从保存null到我的数据库

时间:2011-03-22 16:26:10

标签: java android sqlite

所以我写的表格有两个字段,一个正文和一个标题。如果这些字段不包含任何数据以防止用户将其保存到数据库,我希望获取表单以抛出一个Toast消息。代码应该做三件事之一。第一个是我想要在上面完成的事情。第二个是如果ID intent为null,它将创建一个新条目,如果ID intent具有内容,它将使用新内容更新数据库条目。我遇到的问题是当表单字段为空时,它仍然保存。它似乎完全跳过我的第一个IF声明,我似乎无法弄清楚为什么。我已尝试将null和“”同时用于第一个IF语句,分别和一起使用。救命?

  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();
                    }
                }
                }
        });

2 个答案:

答案 0 :(得分:0)

尝试titleInsert.equals("")

此外,如果它不为空,您可能需要调用titleInsert = titleInsert.trim();,以便捕获" "之类的空白字符串。

编辑:如果您可以使用Apache commons lang,则可以使用具有StringUtils方法的类isBlank(),如果字符串为null,为空或仅包含空格,则返回true。

EDIT2:

titleInsert.equals("")的简短解释:==通常会检查相同的对象,而不是数据等式。因此titleInsert""不一定是同一个对象,但可能相同(空字符串)。请注意,在处理(非空)对象时,几乎在所有情况下都应使用equals,除非您明确知道需要==(除了检查obj == null之外这种情况很少见)

简短示例:new Long(1) == 1L可能会产生错误,因为new Long(1)会创建一个与Long对象不同的对象,该对象用于文字1L(另请注意,我确实排除了自动(un)拳击使用1 L )。另一方面,new Long(1).equals(1L)将产生真实。

答案 1 :(得分:0)

尝试:

 titleInsert.equals("")

 "".equals(titleInsert)

而不是

 titleInsert == ""