2011-04-26 78 views
0

我希望得到一點反饋。當涉及到任何android或java編程時,我都是初學者,所以不確定這個領域屬於哪個領域。我有2個函數(是正確的術語?就像在VB中)返回一個字符串數組或另一個int數組基於一個光標我傳遞給它。我無法弄清楚最長的是爲什麼我的int數組函數在我的Cursor中確認數據時沒有返回任何數據。事實證明,我將傳遞給我的第一個函數(字符串數組)的Cursor會移動光標位置,因爲函數會迭代光標數據。在字符串數組函數後,我將光標傳遞給我的int數組函數。這一個不會返回我的int數組中的任何數據,我只是想了一會兒,直到我意識到它只是看到了光標的末尾,並假設它已經完成了它的工作。一旦我添加了一個cursor.moveToPosition(-1),它效果很好。 java/android不能像VB那樣工作嗎?在VB.net中,我可以將一個對象傳遞給一個函數,該函數不會影響我傳遞的原始對象。對不起,冗長的電子郵件,只是不知道該怎麼說。2個功能之間傳遞的對象

也許我寫了這個錯誤,所以我已經在下面添加了我的代碼,所以你們可以告訴我,如果我做錯了什麼。

CompanyList = mDbHelper.CompanyNames(searchParam, SearchedColumn); 
String CompanyNames[] = mDbHelper.CursorToString(CompanyList, "CompanyName"); 
final int CompanyID[] = mDbHelper.CursorToInt(CompanyList, "CompanyID"); 

public String[] CursorToString(Cursor cursor, String columnName){ 
    int cursorCount = cursor.getCount(); 
    if (cursorCount > 0){ 
     String[] str = new String[cursorCount]; 
     int i = 0; 

     while (cursor.moveToNext()){ 
      str[i] = cursor.getString(cursor.getColumnIndex(columnName)); 
      i++; 
     } 
     return str; 
    } 
    return new String[]{}; 
} 

public int[] CursorToInt(Cursor cursor, String columnName) { 
    int cursorCount = cursor.getCount(); 
    if (cursorCount > 0) { 
     int[] number = new int[cursorCount]; 
     int i = 0; 
     cursor.moveToPosition(-1); 
     while (cursor.moveToNext()){ 
      number[i] = cursor.getInt(cursor.getColumnIndex(columnName)); 
      i++; 
     } 
     return number; 
    } 
    return null; 
} 

回答

1

不,Java不能這樣工作。一般來說,當你從一種語言轉移到另一種語言時,假設他們以相同的方式工作真的是不安全的。在VB中,您有ByValByRef的概念。在第一種情況下,創建副本,在第二種情況下,將傳遞內存地址,並且對該變量所做的任何更改都將反映在其引用的任何其他地方。對於非原始類型的所有變量(例如int,double等),Java的工作原理類似於使用ByRef

我的回答here會給你更多的信息,並檢查出this article對技術參數在Java中傳遞的方式稍微技術性的描述。

+0

當時,不知道。謝謝你的信息。 – Huascar 2011-05-01 14:48:45