2015-06-21 80 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