2016-10-05 85 views
-1

讓「」是其中正在逐漸從服務器響應的第一活性和保存在共享偏好/(使用意圖),然後發送到第二活性「」和表示textview中的值。現在我的問題是,是否有可能刷新第二個活動中的第一個活動而不回到第一個活動,因爲服務器可能會更新一個特定的值,以便在第二個活動中顯示的值應該自動更改(使用定時器/線)。 請給我一個主意。提前致謝。刷新先前的活動在當前活動

例如: 汽車的價值= 20,一等車的汽車= 30,我在二等車上展示它。 ,但幾分鐘/秒後汽車值突然改變爲汽車= 50,現在我不得不在第二次活動中更新一個值。

+0

你所要做的是使用服務而不是活動來實現。 –

+0

沒有服務。只有活動 –

+0

使用帶定時器的服務,設置時間間隔調用服務並獲得響應。 –

回答

2

你打算做什麼並不是一個好習慣。當您進行第二項活動時,第一項活動將停止。

你最好有第三堂課來處理你的網絡資料,然後從任何地方隨時隨地訪問第三堂課。

+0

謝謝@amir Ziarati,請你簡單解釋一下(示例代碼)以便輕鬆理解。 –

+0

例如您可以創建一個名爲「NetworkInteracator」的第三個類,並將一些靜態方法用於獲取網絡數據並將其作爲模型返回。您可以創建一個回調類並將該回調的實現發送給這些方法,以便只要異步任務完成,他們就會以返回數據作爲回調參數來調用您的回調。 –

+0

使用asynchHttp庫https://guides.codepath.com/android/Using-Android-Async-Http-Client –

0

可以定義靜態變量和更新用時使用該變量,或撥打startActivityForResult()和更新值onActivityResult()

+0

我試過你的想法,但我的應用程序崩潰。 –

+0

你可以給我發送錯誤,因爲你只修改變量值。 –

+0

不要使用靜態,它可能導致內存泄漏,不是一個好主意。 –

0

而是共享首選項,你可以使用SQLite數據庫,並使用內容提供商的機制來更新你的UI。也就是說,你可以使用光標加載器來更新你的數據。

製作活動擴展遊標加載器並使用回調來更新活動A中的用戶界面。當數據在SQLite數據庫中被修改後,它會自動反映在用戶界面中,前提是您使用遊標更新UI。

我通常使用this庫來進行數據庫相關操作和使用遊標加載器進行UI更新。當服務器數據不斷變化時,這種方法是最模塊化的方法。 Here是官方文檔。

+0

我建議你遷移到領域,它已經在內置的datasetchange監聽器。而且比SQLite –

1

你可以在Singleton類中存儲你的模型類,所以無論什麼值得到更新,只需更新你的單例類,當你回到活動A調用你的initview函數,讓你的屏幕刷新。

+0

更經濟,更容易使用,如果我進入第二個活動,我不會回到第一個活動來刷新。 –

2

您應該使用服務從服務器獲取數據並將其保存到數據庫,文件,單例類或內容提供程序等常見位置。您的兩項活動都應在特定的時間間隔後從該存儲中獲取數據。假設數據在服務器上發生變化,您的服務將獲取並將其存儲在本地(在數據庫,Singleton類,文件中),您的活動可以輕鬆讀取onResume或任何其他回調方法中的數據。

+0

是否會自動改變?或者我必須在特定時間段內自動刷新第二項活動 –

1

理想情況下,您必須將服務用於與多次下載相關的任何工作或者應該在活動之外進行的工作。

對於您的情況,您可以有一個service,它會向您的服務器發出API調用以獲取最新值。 (如果你使用套接字,則更加可靠)。

一旦服務獲取的價值,把它寫入你的Realm database,並在您的活動,無論你正在使用這些值,你可以有

realm.addChangeListener(new RealmChangeListener() { 
      @Override 
      public void onChange() { 

      } 
     }); 

這個回調將被稱爲每當有你的數據庫中的數據變化。這樣你總是會同步的。