我正在开发一个应用程序,现在有一个小问题。让我解释一下这个应用程序的目的是什么:
- 有一个带有不同按钮的主菜单(比如说 16 个按钮)。- 每次用户单击按钮时,它都会向数据库发送一个请求,并根据您单击的按钮显示具有不同结果的结果列表视图。
- 在数据库中,有一列带有“类别号”。(实际上有 3 列带有 CatNumbers,但让我们保持简单)。
- 请求要求显示此类别编号等于某些值的所有元素(这些是我的方法的输入,称为“myVariableN”,通过 putExtra/getExtra 从 MainActivity 发送到 ListView 活动)。在我的 ListViewActivity 中显示结果:
private void displayListView() {
Bundle bundle = getIntent().getExtras();
String title = bundle.getString("title", "Choose here :");
int myVariable1 = bundle.getInt("myVariable1", 500);
int myVariable2 = bundle.getInt("myVariable2", 500);
int myVariable3 = bundle.getInt("myVariable3", 500);
int myVariable4 = bundle.getInt("myVariable4", 500);
int myVariable5 = bundle.getInt("myVariable5", 500);
int myVariable6 = bundle.getInt("myVariable6", 500);
所以我到目前为止是这样的:例如,如果您单击按钮 1,它会发送 6 个变量(myVariable1、2、3 ... 6)并要求显示所有元素“WHERE CatNumber IN (myVariable1, myVariable2, .. .myVariable6)。
public Cursor findPoiInTable(int myVariable1, int myVariable2,
int myVariable3, int myVariable4, int myVariable5, int myVariable6)
{
String inInterval = "(?,?,?,?,?,?)";
String where = COL_CAT1 + " IN " + inInterval + " OR " + COL_CAT2
+ " IN " + inInterval + " OR " + COL_CAT3 + " IN " + inInterval;
String[] whereArgs = new String[3 * 6];
for (int i = 0; i < 3; i++)
{
whereArgs[6 * i] = Integer.toString(myVariable1);
whereArgs[6 * i + 1] = Integer.toString(myVariable2);
whereArgs[6 * i + 2] = Integer.toString(myVariable3);
whereArgs[6 * i + 3] = Integer.toString(myVariable4);
whereArgs[6 * i + 4] = Integer.toString(myVariable5);
whereArgs[6 * i + 5] = Integer.toString(myVariable6);
}
Cursor c = myDatabase.query(DATABASE_TABLE, new String[] { KEY_ROWID,
COL_NAME, COL_STREET}, where, whereArgs, null, null, null);
return c;
}
问题是,在主菜单的这 16 个按钮中,有几个按钮需要从数据库中获取具有更大范围类别编号的数据。例如,诸如“SELECT .... FROM.... WHERE CatNumber IN (myVariable1, myVariable2, ..... myVariable* 50 *) 之类的内容。
不幸的是,无论怎样,每个按钮的方法都必须相同如果有 2 或 50 个输入变量。
我觉得如果我这样做,我的方法会太重并且会减慢我的整个应用程序,因为在大多数情况下,即使请求应该找到 2 或 3 个 CatNumber,该方法也会被定义为50 个或更多输入,因此每次都必须进行整个计算。
我在想的是:
a/用 IF 语句修改我的方法,例如,如果少于...假设发送了 6 个变量,它将使轻方法只有 6 个 myVariable 输入,否则,它是将使用 50 个输入运行繁重的方法。所以heavy方法只会在少数情况下使用,错误的是即使只有7个输入,它也会运行heavy方法。或者以同样的想法,我可以发送一个通过 putExtra 发送的布尔值,并设置为 TRUE(用于使用 light 方法)和 FALSE(然后它将使用 heavy 方法)。
b/将默认值设置为 500(如我的代码中所做的那样),因此只有特定的 myVariables 的值不同于 500。然后我的问题是:是否可以定义一个具有 50 个输入的方法并使其仅使用其值与某个数字不同的输入,因此该方法并不总是太重而无法运行? 例如,在上面带有方法的代码中,是否可以说如果其他四个变量等于 500(myVariable1 和 myVariable2 而不是所有变量,即使整个方法都是为其余定义的,则只查找两个变量? )。
提前致谢 !