2015-06-21 88 views
0

我試圖製作一個Android小部件,顯示來自Google API的信息,特別是Fitness API。現在,Fitness API客戶端(GoogleAPIClient對象)在Main活動中設置爲公共靜態變量,onUpdate函數抓取它,調用.connect(),然後嘗試從該API獲取信息。它的工作原理,但只有當應用程序的主要活動是積極的 - 如果我關閉它,那麼下一次的應用程序更新,它與錯誤崩潰:如何在widget的onUpdate函數中從Google API獲取信息?

java.lang.RuntimeException: Unable to start receiver 
    Caused by: java.lang.NullPointerException 

在在的onUpdate(在.connect()調用)功能。

有沒有適當的方法來做到這一點,我失蹤了?我該如何做到這一點,以便我可以每次獲取onUpdate被調用時的信息,但仍然處理onConnectionFailed調用 - 我必須在封閉內啓動對失敗連接的解析(通常只給予應用程序權限或指定一個帳戶)活動,而AppWidgetProvider不是一項活動,所以我不能只將客戶端對象放入提供程序中,這是我的第一個想法。

我可以將客戶端放在提供程序中,然後啓動一個新的活動傳入onConnectionFailed期間調用startResolutionForResult調用?如果是這樣,我該如何開始這個意圖,以便它被視爲一個「封閉類」 - 這是我在嘗試將提供者作爲startResolutionForResult的參數時得到的錯誤。

我對小部件和Google API都很陌生,儘管比API的小部件更有經驗,但它仍然是初學Android的開發者。謝謝你的幫助。

回答

0

Is there a proper way to do this that I'm missing?

有通過調用startService()onUpdate()工作委託給一個Service。讓該服務與Fit API對話。當Service從Fit API獲得結果時,它會使用AppWidgetManager更新應用小部件,然後調用stopSelf(),因爲不再需要Service

+0

那麼我會在服務類中聲明合適的API客戶端和所有關聯的方法嗎?如果是這樣,我該如何開始一個活動來處理onConnectionFailed調用?如果沒有,並且我將客戶端保存在主要活動中,那麼當主要活動未處於活動狀態時,服務如何解決空指針問題? –

+0

@JamesS:「那麼我會在服務類中聲明合適的API客戶端和所有關聯的方法嗎?」 - 是的。 「我如何開始處理onConnectionFailed調用的活動?」 - 你不會開始一項活動。您正在做這個應用程序小部件更新的一部分。請不要打斷用戶。改爲提出'通知'。 – CommonsWare