2016-10-06 50 views
0

我正在使用Android的前端,我正在使用Spring的REST客戶端庫將HTTP請求發送到REST Web服務。我已經在線閱讀示例,其中人們使用AsyncTask來完成此操作,RestTemplatedoInBackground方法爲AsyncTask,但我也讀過RestTemplateAsyncTask之外使用的示例,即使在活動或片段中也是如此。使用其中一種方法有什麼意義嗎?從Spring REST服務接收Android中的響應

其次,當通過RestTemplate的exchangegetForAllObject接收到服務器的響應時,根據收到的數據我的客戶端應該做不同的事情。例如,如果我想搜索用戶,我應該收到User對象,然後我的客戶端應該更新用戶片段/活動,但是如果我想登錄,我應該收到不同的數據,並且我的客戶端應該執行不同的後續任務。

如果我每次發送一個HTTP請求,然後收到響應時創建一個AsyncTask,我怎麼能區分後續任務需要完成客戶端?是使用枚舉的首選方法?例如,當我想從服務器獲取數據時,我可以實例化一個AsyncTask,並以參數execute的形式傳遞參數enum,以指定要發送的HTTP請求以及枚舉來指定如何處理接收的數據。那麼我可以使用switch語句來調用基於枚舉的不同函數?

如果這一切都沒有意義,是否有一個更標準的方法來處理來自服務器的處理響應?

回答

0

docs

的AsyncTask能夠正確且容易使用的UI線程。該類允許您執行後臺操作並在UI線程上發佈結果,而無需操作線程和/或處理程序。

AsyncTask提供了一種方便的方式來在後臺執行任務並與主UI線程進行交互。如果你沒有使用AsyncTasks,你必須實現自己的方法來同步主線程來更新UI。如果您正在調用任何後端服務或進行長時間運行的操作,那麼使用異步任務總是很好的。

讓您的相同REST終點根據枚舉返回不同的對象是一種不好的做法。有兩個單獨的端點。一次GET搜索用戶和一次POST呼叫登錄用戶。客戶端在使用上述端點時也有單獨的實現。需要時適當使用它們。

+0

我還不確定這是如何工作的。如果我有一個函數發送一個GET請求和一個函數來發送一個POST請求,那麼這兩個函數是不是會實例化一個擴展AsyncTask以在後臺運行來發送請求並接收響應的類?那麼在調用'onPostExecution'的過程中,AsyncTask怎麼知道從哪裏開始,不知道最初的HTTP請求是POST還是GET請求?我需要爲我希望發送的每種類型的HTTP請求(一個用於登錄,一個用於獲取x數據,一個用於獲取y數據)擴展一個AsyncTask? – Biiiiiird

+0

你必須有兩個獨立的異步任務。以UserSearchAsyncTask和UserLoginAsyncTask爲例。這兩個類都擴展了AsyncTask。然後在需要的地方每個班級通常,您有單獨的活動或片段來處理這兩種情況。 –