我遇到的问题不是紧急问题,因为我的应用程序可以正常工作,但我真的很想了解它为什么会这样。
在我的程序中有一个方法(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);