2011-11-07 20 views
0

我有這樣的:如何把光標(android)的數組2維?

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

我想問,我如何把這個光標放在數組2維上? THX

+0

你會得到什麼錯誤?很難說出你想要在這裏做什麼。 –

+0

java.lang.ArrayIndexOutOfBoundsException – Michelle

+0

logcat說什麼?什麼是完整的錯誤信息? –

回答

0

根據您如何編寫代碼,它看起來像你的內部for循環

population[indexOfChromosomes][indexOfGens] 

應該

population[chromosomesNumber][gensNumber] 
+0

我已經改變了它,第一次循環染色體Number,它成功了,但是對於第二次循環它有錯誤,同一行代碼出錯了,錯誤也是一樣的:java.lang.ArrayIndexOutOfBoundsException ... Thx – Michelle

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-10..indexOfGens-1,而您試圖訪問索引indexOfChromosomesindexOfGens

應該

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

你的做法讓我困惑。我對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()); 
}