如何将光标(android)放到数组2维度?

时间:2011-11-07 05:54:30

标签: java android arrays cursor

我有这个:

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);
      }
   }
}

我运行此代码时遇到错误:  population [indexOfChromosomes] [indexOfGens] = r.getString(0);

我想问一下,我如何将光标r放在数组2维上? THX

3 个答案:

答案 0 :(得分:1)

看起来错误就在这里:

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-1indexOfChromosomes {1}}。

应该是

indexOfGens

答案 1 :(得分:0)

根据你编写代码的方式,它看起来像你的for循环

 population[indexOfChromosomes][indexOfGens]

应该是

population[chromosomesNumber][gensNumber]

答案 2 :(得分:0)

你的方法让我困惑。我不太了解SQL,但看起来你反复随机查询数据库中的一行。我读过这是一项代价高昂的操作。我认为你最好在开始时获取完整的数据集,然后重复一遍。

indexOfChromosomes和indexOfGens如何与数据库&#34; foodstuff&#34;等等?我没有看到连接...

这可以从我自己的方法修改,在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());
}