Я работаю над приложением и имею небольшую проблему прямо сейчас. Позвольте мне объяснить, в чем цель этого приложения:
- есть главное меню с различными кнопками (скажем, 16 кнопок). - каждый раз, когда пользователь нажимает кнопку, он отправляет запрос в базу данных и отображает список результатов с разными результатами в зависимости от кнопки, которую вы нажали.
- в базе данных есть столбец с номером категории. (на самом деле есть 3 столбца с CatNumbers, но давайте сделаем это простым).
- запрос запрашивает отображение всех элементов, где это число категории равно некоторым значениям (это входы моего метода, называемые «myVariableN», отправленные из MainActivity в активность ListView через putExtra/getExtra). В моей ListViewActivity, который отображает результаты:Метод с более чем 50 входными переменными?
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 * *).
И, к сожалению, метод должен быть одинаковым для каждой кнопки, независимо от того, есть ли 2 или 50 входных переменных.
Мне кажется, что если я это сделаю, мой метод будет слишком тяжелым и замедлит все мое приложение, потому что в большинстве случаев, даже если запрос будет искать 2 или 3 CatNumbers, метод будет определяться для 50 входов или более, поэтому каждый раз он будет делать весь расчет.
То, что я думал только о том:
а/ Изменение моего метода с утверждением IF, так, например, если есть меньше, чем ... скажем, 6 переменных послали, он будет делать легкий метод с только 6 myVariable input, ELSE, он будет запускать тяжелый метод с 50 входами. Таким образом, тяжелый метод будет использоваться только в нескольких случаях, неверно, что даже если есть только 7 входов, он будет запускать тяжелый метод. Или в такой же идее я мог бы отправить логическое сообщение, отправленное через putExtra, и установить значение TRUE (для использования метода light) и FALSE (а затем он будет использовать тяжелый метод).
b/ Установите значение по умолчанию на 500 (как это сделано в моем коде), поэтому только конкретные myVariables имеют значение, отличное от 500. Затем мой вопрос: можно определить метод с 50 входами и чтобы он использовал только вход, значение которого отличается от определенного числа, поэтому метод не всегда слишком тяжел для запуска? Например, в приведенном выше коде с помощью метода можно было бы говорить только о двух переменных, если четыре других равны 500 (myVariable1 и myVariable2 вместо всех переменных, даже если весь метод определен для остальных ?).
Заранее благодарим!
Я чувствую, что вы должны потратить некоторое время обрезки на этот вопрос сводится к проблеме минималистичным. В стороне, вы никогда не будете нуждаться в методе с 50 параметрами. Когда-либо. – Eric
Инкапсулируйте свои значения в классах? – dmon
Если вы используете WHERE ... IN, похоже, вы должны передать массив методу - возможно ли это? – Sam