2013-04-04 52 views
3

我有一個方法返回一個對象數組(Java中所有類的父類)。數組包含2種類型的數據,你可以看到objArray[0] is a int;objArray[1] is a cursor;如何從Object類的數組中提取遊標和整數值?

public Object[] search_record(String rollNo) { 

    Object[] objArray = new Object[2]; 

    SQLiteDatabase db = this.getWritableDatabase(); 

    Cursor cur = db.rawQuery("SELECT * FROM " + TABLE_NAME 
      + " where roll_no = ?", new String[] { rollNo }); 
    int count = cur.getCount(); 

    objArray[0] = count; 
    objArray[1] = cur; 

    Log.i("Records count", count + ""); 

    return objArray; 

} 

現在我無法提取這些值回原始值i.e int and cursor。我得到這樣的數組。

Object[] objArray = dbHelper.search_record("08cs18"); 
int x = ((Integer) objArray[1]).intValue(); 
Cursor cursor = (Cursor) objArray[0]; 

,但應用程序崩潰與classCastException

從技術上講這是可能的,我想。

+0

母類 – 2013-04-04 20:21:04

+0

@Alex真的是母親班嗎?爲什麼不是父親班 – 2013-04-05 04:40:21

+1

曾經是舊版本。在Java 7中它已被重命名爲granpa類,所以不要介意 – 2013-04-05 05:01:14

回答

4

看起來很簡單。看看你的說法:

objArray [0]是一個int;而objArray [1]是一個遊標;

,然後代碼:

Object[] objArray = dbHelper.search_record("08cs18"); 
int x = ((Integer) objArray[1]).intValue(); 
Cursor cursor = (Cursor) objArray[0]; 

你對待他們以錯誤的方式 - 爲objArray[1]是整數,objArray[0]是光標。只需切換索引。

或者,最好...創建自己的類來封裝「光標和計數」:

public final class CursorAndCount { 
    private final int count; 
    private final Cursor cursor; 

    public CursorAndCount(int count, Cursor cursor) { 
     this.count = count; 
     this.cursor = cursor; 
    } 

    public int getCount() { 
     return count; 
    } 

    public int getCursor() { 
     return cursor; 
    } 
} 

然後你可以改變search_record(應該叫searchRecord)返回一個CursorAndCount - 並且調用代碼將立即更具可讀性。

請注意,考慮到無論如何你都會從光標處獲得計數,爲什麼不只是返回光標?來電者可以自己使用Cursor.getCount(),不是嗎?

+0

我的粗心大意:)感謝這樣的真棒答案 – 2013-04-04 18:52:48

3

你在混合索引,光標​​在位置1和int在位置0。試試這個:

int x = ((Integer) objArray[0]).intValue(); 
Cursor cursor = (Cursor) objArray[1]; 

你看,這是正是的那種,使用戶使用具有混合數據類型的對象數組一個壞主意的問題。你最好用你想返回的屬性創建一個新類(一個「傳輸對象」),並返回該類的一個實例。

3

您正在使用其他方式的索引。 0表示int,1表示光標。