2013-03-02 75 views
0

最近寫了一些應用程序我已經停止了一個問題。如何保存對象的列表onStop/onPause在Android的活動

在這個程序中,我有兩個活動:A和B.在活動A我每次從GPS座標變化下載對象列表。對於這項活動,與GPS和互聯網連接呼叫相連的綁定服務。然後這些對象被放入從他們的名字創建的列表中,並且在按下任何這些對象之後,我可以打開傳遞該對象的B活動,並且在活動B中從該對象獲取更多信息。

活動B沒有任何綁定服務,它只是將內部對象顯示出來。

由於活動A中的綁定服務在onStop中未綁定,因此當我使用向後箭頭回到它時,需要一段時間才能再次下載所有內容。更有趣的是,該列表仍然是填充的,但這些僅僅是名稱,實際的對象列表不存在,並且在任何名稱復位之後立即按下將導致OutOfBoundException。

所以,我的問題是,當我開始活動A時,如何保存這些對象並在下載新的(或同一個)列表之前返回並檢索它們時,您會採取什麼建議?

我已經試過:

  • onRestoreInstanceState()onSaveInstanceState(),因爲可以節省parcelable名單,但活動一不被破壞得這麼快,所以沒有呼籲onRestoreInstanceState();
  • Shared preferences,但這是不好的選擇,因爲你不能在那裏保存列表;
  • ContentValuescontent resolvers但也是不好的選擇,因爲你不能保存列表。

你有什麼更多的想法,它是如何做到的?

噢,我忘了提,我假設列表中可以有最多100個對象,並且每個對象都有5個字段。

回答

0

如果不使用SharedPreferences和ContentValues的原因是因爲它無法處理列表,那麼您可以考慮將列表序列化爲JSON之類的東西,將其保存爲String,並將其加載映射回對象。它通常是2行代碼來轉換對象< - >例如JSON。

0

需要緩存下載的數據在一個單獨的類喜歡這裏

類DataController類 {

公共靜態的ArrayList AA;

}

填充當你下載數據,並在活動性檢驗,如果該列表不爲空,然後使用此ArrayList改爲只下載它的此ArrayList。對單身課程概念做更多的研究,我相信你會學到對你非常有用的東西。

1

創建一個Singleton類,並將這些對象存儲在一個HashMap或ArrayList(任何適合您的)中,並在其他活動中訪問該列表。

import java.util.ArrayList; 

public class DataHandler { 
    private static DataHandler handler; 
    private ArrayList<Object> list; 

    private DataHandler() { 
    } 

    public static DataHandler getInstance() { 
     if (handler == null) 
      handler = new DataHandler(); 
     return handler; 
    } 

    public ArrayList<Object> getList() { 
     return list; 
    } 

    public void setList(ArrayList<Object> list) { 
     this.list = list; 
    } 
} 
相關問題