Как поместить курсор (Android) в массив 2 измерения? - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть это:

String [][] population = new String[indexOfChromosomes][indexOfGens];

for(int chromosomesNumber = 0; chromosomesNumber <= indexOfChromosomes ; chromosomesNumber++){
  for(int gensNumber = 0; gensNumber <= indexOfGens ; gensNumber++){
    Cursor r = db.rawQuery("SELECT _id, key_foodstuff, key_calorie, key_carbohydrate, key_fat, 
      key_protein FROM (food INNER JOIN categories ON food.key_nocategory = 
      categories.nocategories) WHERE key_type='primary' 
      AND _id!=164 ORDER BY RANDOM() LIMIT 1", null);       

      if(r.moveToFirst()){              
       population[indexOfChromosomes][indexOfGens] = r.getString(0);
      }
   }
}

Я получил сообщение об ошибке при запуске этого кода: население [indexOfChromosomes] [indexOfGens] = r.getString (0);

Я хочу спросить, как поместить курсор r в размерность массива 2? Thx

Ответы [ 3 ]

1 голос
/ 07 ноября 2011

похоже, ошибка здесь:

String [][] population = new String[indexOfChromosomes][indexOfGens];

for(int chromosomesNumber = 0; chromosomesNumber <= indexOfChromosomes ; chromosomesNumber++){
    for(int gensNumber = 0; gensNumber <= indexOfGens ; gensNumber++){

размер массива indexOfChromosomes x indexOfGens, поэтому его индексы равны 0..indexOfChromosomes-1 и 0..indexOfGens-1, когда вы пытаетесь получить доступиндекс indexOfChromosomes и indexOfGens.

Это должно быть

for(int chromosomesNumber = 0; chromosomesNumber < indexOfChromosomes ; chromosomesNumber++){
    for(int gensNumber = 0; gensNumber < indexOfGens ; gensNumber++){
0 голосов
/ 11 июня 2014

Ваш подход меня смущает. Я не знаю много о SQL, но похоже, что вы неоднократно запрашиваете у вашей базы данных одну строку наугад. Я читал, что это дорогостоящая операция. Я думаю, что вам лучше получить полный набор данных один раз, в начале и повторить это.

Как indexOfChromosomes и indexOfGens соотносятся с базой данных с колонками «foodstuff» и т. Д.? Я не вижу связи ...

Это модификация моего собственного метода, который хорошо работает в Android. Если работает rawQuery, то весь лот должен:

// The order of this array will affect final array
// I would also use this array in the query itself
String[] columnNames = {
        "_id", "key_foodstuff", "key_calorie", "key_carbohydrate", "key_fat", "key_protein"
};
Cursor r = db.rawQuery("SELECT _id, key_foodstuff, key_calorie,
        key_carbohydrate, key_fat, key_protein FROM (food INNER JOIN
        categories ON food.key_nocategory = categories.nocategories)
        WHERE key_type='primary' AND _id!=164", null);

int rowCount = r.getCount();
int columnCount = columnNames.length;
// create the required array with appropriate dimensions
String[][] array = new String[rowCount][columnCount];
// begin iterating over the cursor
if (r.moveToFirst()) {
    int row = 0;
    do {
        // for each row of the cursor, get the values from all
        // of the columns
        for (int column = 0; column < columnCount; column++) {
            array[row][column] = cursor.getString(cursor.
                    getColumnIndex(columnNames[column]));
        }
        row++;
    } while (r.moveToNext());
}
0 голосов
/ 07 ноября 2011

Исходя из того, как вы написали свой код, он выглядит внутри цикла for

 population[indexOfChromosomes][indexOfGens]

должно быть

population[chromosomesNumber][gensNumber]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...