我正在開發涉及多個片段的應用程序。 在每個片段中,我必須調用Web服務來獲取數據。Android片段:用於Web服務調用的生命週期方法
目前我打電話給web服務onCreateView() Fragment的方法。問題我得知,無論何時進行Web服務調用,並且如果設備方向改變,則新的Web服務調用開始調用。
我想這可能是因爲onCreateView()方法在配置更改時被調用。
我該如何解決這個問題。以及我應該使用哪種生命週期方法來調用Web服務,以便它只能被調用一次
我正在開發涉及多個片段的應用程序。 在每個片段中,我必須調用Web服務來獲取數據。Android片段:用於Web服務調用的生命週期方法
目前我打電話給web服務onCreateView() Fragment的方法。問題我得知,無論何時進行Web服務調用,並且如果設備方向改變,則新的Web服務調用開始調用。
我想這可能是因爲onCreateView()方法在配置更改時被調用。
我該如何解決這個問題。以及我應該使用哪種生命週期方法來調用Web服務,以便它只能被調用一次
我已經通過以下解決方法
爲每個Web服務調用方法操作標識符解決了這個。例如。例如,「驗證」登錄調用
創建的ArrayList的一個對象說currentTasks
ArrayList<String> currentTasks = new ArrayList<String>();
在我打電話的web服務的每一個方法,檢查相應方法的操作標識已經出現在ArrayList中。如果沒有,然後開始操作。其中上述操作的響應被接收
String operationId = "Authentication";
if(currentTasks.indexOf(operationId) == -1)
{
<do web service call operation here>
currentTasks.add(operationId);
}
的方法,從ArrayList中
if(currentTasks.indexOf("Authentication") != -1){
currentTasks.remove("Authentication");
}
此除去操作標識將確保呼叫不會去這是目前正在進行Web方法。
我知道這不是實現它的最好方法,這可能不是最佳實踐,但現在這對我來說很有效。
如果您的Web服務代碼由於設備方向更改而重新啓動,那麼您可能會使用AsyncTask
。這是AsyncTasks的常見問題,您有幾種方法可以解決它。
一個常見的解決方法是將AsyncTask包裹在一個不可見的Fragment
周圍,並確保這個片段不會在方向更改期間被破壞並重新創建。看看這個教程如何去做:Retaining Objects Across Config Changes
一個簡單的解決方案是使用指向asynctask的靜態變量。如果變量不爲null,則創建並調用AsyncTask。
問候, Prateek
我有同樣的問題。當我將選項卡旋轉90度時,會再次調用onCreate,並嘗試重新打開已打開的套接字,並且由於在轉換選項卡之前套接字未關閉,因此會發生錯誤並且應用程序異常終止。你的情況與我的不同,因爲你沒有收到錯誤,只是開始一個新的連接 – mangusta
我試圖找到一些特定的事件,以便在活動重新啓動前攔截方向改變並關閉套接字,但沒有成功。有一點是肯定的,當方向改變 – mangusta
PS時,調用onCreate()。嗯,只是意識到,我可以檢查是否在'onCreate()'的開頭打開或關閉它,如果是的話: – mangusta