0

我遇到的问题不是紧急问题,因为我的应用程序可以正常工作,但我真的很想了解它为什么会这样。
在我的程序中有一个方法(findFilterInTable),它有两个字符串输入(categoryInterval 和 paymentInterval)。

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

在我的应用程序中有一个单选按钮设置 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 为空时在 COL_PAYMENT 中发出请求时崩溃,我想更改查询:如果 paymentInterval 为空,那么它将不会查询我数据库中的相关列(COL_PAYMENT)。否则(如果 paymentInterval 不为空),它将查询 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 为空(用户单击否),它不会查询 COL_PAYMENT
- 如果 paymentInterval 不为空(在我的情况下类似于 %visa%),它会查询数据库和显示正确的结果。

你知道是什么导致了这个奇怪的结果吗?

[编辑] 附加到我的按钮的侦听器:

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);
4

1 回答 1

2

这段代码完全按照所写的。

if (paymentInterval != null)

!=is not equal运算符。因此,如果 paymentInterval 不等于 null,它会将 COL_PAYMENT 添加到查询中;否则它会忽略它。

于 2013-03-27T07:39:18.983 回答