无法在Android中启动服务
问题描述:
我制作了用于阅读新闻项的小部件。如果我在主屏幕上放置一个小部件,一切都很好。但是,如果我在主屏幕上放置了一个后缀,并将其删除,则该小部件的服务将停止。因此,如果小部件进入更新方法,则会发生错误。无法在Android中启动服务
java.lang.RuntimeException: Unable to start service [email protected] with Intent { flg=0x10000000 cmp=news/.WidgetActivity$UpdateService bnds=[26,97][79,151] }: java.lang.NullPointerException
一个空指针是在这一行:
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
下面的代码:
public static class UpdateService extends Service {
@Override
public void onStart(Intent intent, int startId) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
remoteViews.setViewVisibility(R.id.WidgetRefresh_btn, View.GONE);
remoteViews.setViewVisibility(R.id.progressWidget, View.VISIBLE);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
WidgetActivity.Widget.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
答
你context
对象可能是空。由于您的服务范围是Context
,因此您最好使用this.getPackageName()
或仅使用getPackageName()
。
Tnx!恩......认为问题是固定的。但是现在我又遇到了另一个问题:如果我有两个小部件,并且按下第一个小部件上的按钮,则第二个小部件会更新他的自定义。这与WidgetIdd有什么关系? – Johan
这取决于您设置为第一个小部件的意图。如果它触发appwidgets的更新机制,它可能会更新第二个。但是,如果没有整个更新代码,很难说清楚。如果你无法弄清楚,我建议开一个新的问题。该id仅是每个appwidget实例的唯一引用。不应该被分配到这两个小部件,所以我猜它与它无关。 – 2011-08-17 19:51:27