2013-08-28 16 views
0

所以,我會盡量簡化。我使用這個調用相關的數據來更新我的列表什皮沙克列表值不會超出方法

parent.queryDatabase(spisak, params); 

而且方法如下:

public void queryDatabase(List<School> spisak, String[] args) { 
    databaseHelper.open(); 
    Cursor c; 
    c = databaseHelper.getAllSchools(); 
    if(!c.moveToFirst()) { 
     Toast.makeText(getApplicationContext(), "Ova pretraga nije vratila nijednu školu", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     spisak = cursorToSchool(c); 
    } 
    databaseHelper.close(); 
} 
public List<School> cursorToSchool(Cursor c) { 
    //Converts the Cursor object to temporary School object 
    List<School> listing = new ArrayList<School>(); 
    School s = new School(); 
    do { 
     s.setId(c.getInt(0)); 
     s.setName(c.getString(1)); 
     s.setAddress(c.getString(2)); 
     s.setEntryExam(String.valueOf(c.getInt(3))); 
     s.setNoS(c.getInt(4)); 
     s.setTelephone(c.getString(5)); 
     s.setWebsite(c.getString(6)); 
     listing.add(s); 
    } 
    while (c.moveToNext()); 
    return listing; 
} 

在調用的方法中的重複可變什皮沙克包含的數據是應該有(我在調試過程中檢查過),但超出範圍(回到調用方法的FragmentActivity中),真正的spisak是空的,即在被調用的方法中所做的更改不是持久的。所以當我在FragmentActivity中調用變量時,應如何引用spisak變量,以便它可以保留在該方法中分配給它的值。 例如,在帕斯卡爾:

調用方法名(X爲整數)將不會保留數據

調用方法名(VAR X:整數)將持續數據...

在此先感謝。乾杯!

+0

我認爲你誤解了參數傳遞給方法的方式。在'queryDatabase()'你有一個'spisak'的引用,它是從這個方法的一個對象的引用,然後你改變引用'spisak'。簡單地說,你可以改變(比如在'queryDatabase()'內調用'add()'或'remove()')'spisak',但是你不能改變它的引用。 –

回答

0

每次您實例化一個新對象時,它都存儲在一個內存位置。

考慮到,則外queryDatabase()方法,要傳遞作爲spisak變量被存儲在存儲器位置1000

queryDatabase()接收spisak,其基本上接收一個指向存儲器位置1000。

您的cursorToSchool()方法始終會創建一個新的List<School>變量並將其返回。因此,每次您撥打cursorToSchool()時,都會創建一個新對象並將其指向新的內存位置。

所以,當你調用spisak = cursorToSchool(c);queryDatabase(),要創建一個新的對象(假設它在內存中的位置2000)並將其存儲在變量spisak。現在spisak指向的內存位置2000

的問題是,誰叫queryDatabase()具有可變pointin內存位置1000,你所做的一切被改變內存位置2000換句話說,你正在改變你想要的一切內queryDatabase(),但是給那個叫它的人,你什麼都不做。

解決您的問題的一個可能方法是返回List<School>而不是使其無效,然後返回spisak變量。

相關問題