2011-08-17 113 views
0

我製作了用於閱讀新聞項的小部件。如果我在主屏幕上放置一個小部件,一切都很好。但是,如果我在主屏幕上放置了一個後綴,並將其刪除,則該小部件的服務將停止。因此,如果小部件進入更新方法,則會發生錯誤。無法在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; 
    } 
} 

回答

2

context對象可能是空。由於您的服務範圍是Context,因此您最好使用this.getPackageName()或僅使用getPackageName()

+0

Tnx!恩......認爲問題是固定的。但是現在我又遇到了另一個問題:如果我有兩個小部件,並且按下第一個小部件上的按鈕,則第二個小部件會更新他的自定義。這與WidgetIdd有什麼關係? – Johan

+0

這取決於您設置爲第一個小部件的意圖。如果它觸發appwidgets的更新機制,它可能會更新第二個。但是,如果沒有整個更新代碼,很難說清楚。如果你無法弄清楚,我建議開一個新的問題。該id僅是每個appwidget實例的唯一引用。不應該被分配到這兩個小部件,所以我猜它與它無關。 – 2011-08-17 19:51:27