我正在经历一些不是紧急问题的事情,因为我的应用程序正常工作,但我真的很想知道为什么它的行为是这样的。
在我的程序中有一个方法(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);
答案 0 :(得分:2)
这段代码完全符合所写的内容。
if (paymentInterval != null)
!=
是is not equal
运算符。因此,如果paymentInterval不等于null,则将COL_PAYMENT添加到查询中;否则就把它抛弃了。