【问题标题】:If / else statement doing the opposite of what is expected (code + exaplanations)if / else 语句与预期相反(代码+解释)
【发布时间】:2013-03-27 07:35:54
【问题描述】:

我遇到的问题不是紧急问题,因为我的应用程序可以正常工作,但我真的很想了解它为什么会这样。
在我的程序中有一个方法(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 为空(用户点击 NO),它不会查询 COL_PAYMENT
- 如果 paymentInterval 不为空(在我的例子中类似于 %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);

【问题讨论】:

  • 实际将点击侦听器附加到按钮的代码在哪里?
  • 天哪,也许在我们之前的讨论中,我的意思是不为空,把它写成空
  • 啊,别担心,我做了一些研究,但每次我阅读 (myString != null) 时,都会向人们提出将字符串设置为 null 的方法,但不清楚恰恰相反!无论如何,谢谢,它现在运行良好!

标签: android if-statement


【解决方案1】:

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

if (paymentInterval != null)

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

【讨论】:

  • 这个。也许您在第一次尝试时使用了 if(paymentInterval = null) ?而不是 ==
  • 真的吗?!我一直在这里读到这个,我读到的所有内容都让我产生了相反的想法,因为它从未明确说明过(stackoverflow.com/questions/5499809/…)。非常感谢您的指正! =)
猜你喜欢
  • 2017-03-25
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2020-03-11
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
相关资源
最近更新 更多