2012-10-23 167 views
0

我想將數據從活動傳遞到服務。目前我正在嘗試使用ArrayList<HashMap<String, String>>。我有什麼選擇將其傳遞給服務?我正在考慮將它作爲額外的數據在意圖,但我不知道如何做到這一點。或者是否有可能將此設置爲某種全球?Android ArrayList <HashMap <String,String >>

目前它被設置爲活動的靜態,並且服務正在回調到要與ArrayList中的下一項一起提供的活動。我對這種工作方式並不滿意,所以想將列表移到服務中。

編輯

在回答下面提出的問題:

我試圖通過播放列表(是的,另一個媒體應用程序)的服務。播放列表ArrayList<HashMap<String, String>>約束配對歌曲信息,如「歌曲標題」,「這是一個標題」。

但我認爲我對應用程序的生命週期感到困惑。當用戶點擊播放時,該服務被創建。如果我使用靜態列表,創建服務時會看到該列表。因此,該服務將樂意繼續播放此列表中的歌曲。但是,如果用戶更改文件夾等,我如何讓應用程序識別播放列表中的更改?應用程序的設計方式是,用戶可以隨時清除列表中的曲目,也可以瀏覽到不同的文件夾。當歌曲完成時,應該加載新的列表。這樣做的最好方法是什麼?或者,我現在做的最好的方式是什麼?當歌曲完成後,將廣播發送回請求下一首曲目的主要活動。我應該在此時銷燬服務並允許「下一首歌曲」功能重新創建嗎?

生命週期混淆!

+0

你試圖傳遞給服務的是什麼樣的數據? hashmaps數組? – SemperFly

+0

如果你實現了一個Parceable對象,你可以把它作爲一個額外的intent-correct?你不能那樣做? – smk

+0

假設你已經完成了在服務到達時編輯數組列表,你是否嘗試導入靜態變量而不是簡單地調用它? – mango

回答

1

ArrayListHashMap實施Serializable,所以你應該能夠將你的結構填入意圖,並使用Intent.getSerializableExtra()檢索它。

在您的活動中,您只需調用Intent.putExtra(String name, Serializable value)過載。

作爲一個經驗法則,儘可能避免在應用程序中出現靜態變量。當您的應用程序被操作系統關閉然後重新創建(即從最近的應用程序列表中)時,它們會變得棘手。

+0

是的,我同意,我希望儘可能避免靜態,這就是爲什麼我希望有更好的方式傳遞數據。爲了傳遞可序列化的數據,我需要一個自定義類來寫這個,或者我可以在適當的時候向它拋出'ArrayList'? –

+0

查看我的更新回答。你所需要做的就是將'ArrayList'傳遞給'intent.putExtra()'。 – wsanville

1

您是否考慮過將數據存儲在數據庫中,並簡單地發送數據已更改的意圖?或者使用一個ContentProvider來「單獨」發信號表示數據已經改變並且需要重新加載?這樣,即使應用程序無法完全關閉,您也不會使用狀態。

+0

我沒有考慮過這個,但它不是我之前做過的。我能麻煩你通過lifecyle說說我嗎?我在想:創建播放列表,保存到數據庫。點擊播放,開始服務。服務檢查數據庫的內容,播放軌道1。在下一個/完整播放曲目2.如果用戶更改播放列表,該服務如何知道?活動如何知道歌曲2已經開始? –

+0

您將使用Intent觸發服務,包含例如一個枚舉NEW_PLAYLIST,START,PAUSE,...服務可以通過(本地)廣播來表示歌曲完成,然後在活動中處理。我仍然必須親自嘗試一下。 – koljaTM

相關問題