1

我有一個模型,lineModel,我正在使用它爲我的gridAdapter填充數組items當我手動填充條目時,我的模型正常工作。例如:嘗試訪問字符串數組時收到ArrayIndexOutOfBoundsException

lineModel[] items = { 
       new lineModel(2, "B", "", "#52D017", 5, 10, 30), 
       new lineModel(3, "C", "", "#000000", 4, 8, 30), 
}; 

然而,隨着SQLite的填充items當我接收ArrayIndexOutOfBoundsException

具體而言:68

04-15 15:50:21.322: E/AndroidRuntime(26804): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
04-15 15:50:21.322: E/AndroidRuntime(26804): at com.idealiner.metrosleepuniversal.model.GridModel.getLines(GridModel.java:68) 

是當我打電話lineModel並用填充它遊標的值。

 items[i] = new lineModel(i, c.getString(c_line), c.getString(c_name), c.getString(c_ccolor), 0, 0, 0); 

方法getLines()應該返回對象數組,但某處while()循環,我相信填充數組的時候出現了問題,最有可能的。

任何幫助/意見/指導,將不勝感激。

整個方法,getLines,低於:

public lineModel[] getLines() { 

    SQLiteDatabase db = getReadableDatabase(); 
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 


    String[] sqlSelect = {"*"}; 
    String sqlTables = "lines"; 

    qb.setTables(sqlTables); 
    Cursor c = qb.query(db, sqlSelect, null, null, 
      null, null, null); 


    lineModel[] items = {}; 

    int i=0; 

    int c_line  = c.getColumnIndex("line_id"); 
    int c_name  = c.getColumnIndex("line_name"); 
    int c_ccolor = c.getColumnIndex("line_color"); 
    int c_tcolor = c.getColumnIndex("text_color"); 


    c.moveToFirst(); 

    if (c != null) { 
     while(c.moveToNext()) { 
      items[i] = new lineModel(i, c.getString(c_line), c.getString(c_name), c.getString(c_ccolor), 0, 0, 0); 
      i++; 
     } 
     c.close(); 
    } 

    return items; 
} 

回答

2

不能使用。 。"*"與列名一起必須要麼只使用"*"或者必須在陣列中宣佈每一列所以,不要做這樣的:

String[] sqlSelect = {"0 _id", "*"}; 

加入他們中的每一個來代替:

String[] sqlSelect = { "line_id", "line_name", "line_color", "text_color"}; 

或者:

String[] sqlSelect = { "*" }; 

還必須刪除c.moveToFirst()調用,以避免跳過光標的第一行,因爲c.moveToNext()已經完成這個工作適合你。

你的陣列也必須大到足以容納所有項目:

lineModel[] items = new lineModel[c.getCount()]; 

除此之外,記住在Java中類名以大寫字母。

+0

謝謝你,我已經相應地更新我的代碼。 – markbratanov

3

嘛,你要創建一個零長度數組:

lineModel[] items = {}; 

所以沒有items[i]當您嘗試分配給它。

如果您可以使用c.getCount(),如Flavio Faria所示,請將初始長度設置爲該值。否則,我建議你隨身攜帶一個ArrayList.add()項目。你可以用.toArray()

得到結果數組,事實上,你可能會考慮使用一個ArrayList,並將其作爲返回值傳遞,這通常是一個好主意。

另一種選擇 - 這取決於你如何使用這些線路模型項目 - 是通過迭代器而不是數組(如你在做什麼本質上是迭代到一個數組

+0

謝謝,我要試試這個。 – markbratanov

+0

@markbratanov:你感謝我們主要upvoting答案... – einpoklum

+0

我對;) – markbratanov

相關問題