if / else语句与预期相反(代码+解释)

时间:2013-03-27 07:35:55

标签: android if-statement

我正在经历一些不是紧急问题的事情,因为我的应用程序正常工作,但我真的很想知道为什么它的行为是这样的。
在我的程序中有一个方法(findFilterInTable),它有两个字符串输入(categoryInterval和paymentInterval)。

该方法是向我的数据库发送请求,在某些列中查找categoryInterval = something和paymentInterval = something的元素(取决于单击的按钮,用户的选择等)。

在我的应用程序中有一个radiobutton设置paymentInterval的值,如下所示:

OnClickListener radiobutton_no_listener = new OnClickListener() {
    public void onClick(View v) {
        paymentInterval = null ; 
    }
};

OnClickListener radiobutton_yes_listener = new OnClickListener() {
    public void onClick(View v) {
        paymentInterval = " LIKE " + " '%visa%' " ; 
        }
};

因此,当用户点击按钮NO时,表示paymentInterval为空。

现在,我的方法是查询我的数据库。因为当paymentInterval为null时在COL_PAYMENT中发出请求时崩溃,我想更改查询:如果paymentInterval为null,则它不会查询我的数据库中的相关列(COL_PAYMENT)。否则(如果paymentInterval不为null),它将查询COL_PAYMENT并收集结果 我试过这种方式,它不起作用,在绝望中我只是交换了我的陈述,现在它起作用了:

 public Cursor findFilterInTable(String categoryInterval,
        String paymentInterval) {
    String where;
    if (paymentInterval != null) {
        where = "(" + COL_CAT1 + " IN " + categoryInterval + " OR "
                + COL_CAT2 + " IN " + categoryInterval + " OR " + COL_CAT3
                + " IN " + categoryInterval + ") AND (" + COL_PAYMENT
                + paymentInterval + ") ";
    }

    else {
        where = COL_CAT1 + " IN " + categoryInterval + " OR " + COL_CAT2
                + " IN " + categoryInterval + " OR " + COL_CAT3 + " IN "
                + categoryInterval;
    }

    Cursor c = myDatabase.query(DATABASE_TABLE, new String[] { KEY_ROWID,
            COL_NAME, COL_STREET, COL_WEBSITE, COL_PAYMENT, COL_TELEPHONE,
            COL_PRICE, COL_REMARKS, COL_DATEFRIENDLY }, where, null, null,
            null, null);
    return c;
}

此代码的工作原理与编写的代码相反。当我使用我的申请时:
- 如果paymentInterval为null(用户单击“否”),则不查询COL_PAYMENT
- 如果paymentInterval不为null(在我的情况下就像%visa%),它会查询数据库并显示正确的结果。

你知道导致这种奇怪结果的原因吗?

[edit]附加到我的按钮的监听器:

radiobutton_yes = (RadioButton) dialogView
                .findViewById(R.id.radiobutton_yes);
        radiobutton_yes.setOnClickListener(radiobutton_yes_listener);

        radiobutton_no = (RadioButton) dialogView
                .findViewById(R.id.radiobutton_no);
        radiobutton_no.setOnClickListener(radiobutton_no_listener);

1 个答案:

答案 0 :(得分:2)

这段代码完全符合所写的内容。

if (paymentInterval != null)

!=is not equal运算符。因此,如果paymentInterval不等于null,则将COL_PAYMENT添加到查询中;否则就把它抛弃了。