2014-04-28 33 views
0

我需要從服務器提取數據列表,並將數據提供給適配器,並以列表視圖顯示。MVC:誰應該獲取數據,適配器或活動

問題是誰應該做後端調用,活動或適配器還是?

請詳細說明原因。這個問題更多的是爲什麼而不是如何。

請在模型視圖控制器或類似的答案(我知道嚴格來說android沒有MVC)上下文中回答。

編輯:。

它現在明顯對我的適配器是非常不好的地方來獲取數據(想象一下,這將是多麼非彈性例如,如果有兩個端點類似類型的數據還是我對於相同的數據集有兩個適配器,讓其中一個適配器獲取數據是沒有意義的)。其他組件應該獲取數據並填充適配器。活動是一個很好的組件。

接受的答案提供了一個這樣做的例子。

+0

請給出一個理由,如果你投票。如果你覺得這是錯誤的,爲什麼不指出爲什麼? –

回答

1

從不從活動中獲取數據,因爲它會的UI。

您應該根據需要擴展AsyncTask參數和返回類型。 (@覆蓋它)和方法onPostExecute(@覆蓋它),請在您的活動中調用一些公共方法,以便爲其提供您獲取的數據。

最後,帶有新數據的活動應將其饋送到適配器。

這就是我總是得到我的數據,並根據需要得到結果的100%(在獲取數據之前添加progressBar並使其可見並在將其提供給適配器後使其不可見)。

希望我對你很清楚。如果你想要一些代碼作爲例子,請詢問。

工作流

1 - 活動 - >新MyAsyncTask(...)執行(); //獲取數據@Override doInBackGround

2 - MyAsyncTask.onPostExecute(){myActivity.giveFreshData(...)} //傳遞數據

3 - Activity.giveFreshData(...){MyListAdapter .giveMyData(...)}

儘管它不是MVC,但您應該如何將UI與數據消耗和數據表示分開。

+0

感謝您的評論,我沒有說我要同步獲取:) –

+0

你應該永遠不要在主線程(UI負責)上努力工作 - 這是主要原因。 不使用適配器的另一個原因是它不需要知道數據來自何處。 –

+0

好的,我只提到了AsyncTask,因爲我不知道你對Android SDK有多熟悉。 我喜歡將活動視爲展示,將AsyncTasks視爲運輸者,將適配器視爲工作者。希望我的類比幫助你! –

0

他們都不是,我會創建一個請求並將其轉換爲對象的類,然後活動將這些對象傳遞給適配器。

實際上,只有當這是一個異步任務時,您才能直接從活動中獲取數據。 (但它會產生複製的代碼)

適配器類它通常用於將對象變換爲以列表那樣

東西可見和東西的活性會像的控制器,其與該取類交互來自服務器和適配器的數據。那麼你將需要一個類來獲取數據並將其返回到java對象中(這不是必須的,但是如果你使用的是MVC,它是最好的方法)。同樣,如果你直接從活動中調用一個asyncTask,如果存在更多需要做同樣請求的活動,那麼你將會有重複的代碼(並且每個人都知道它從來都不是好的)。那麼爲什麼我們需要另一個類來將請求轉換爲活動捕獲的回調中的對象,這個類可以從所有活動或類中重用。

相關問題