Android小部件:java.lang.NullPointerException

Android小部件:java.lang.NullPointerException,android,widget,nullpointerexception,Android,Widget,Nullpointerexception,我用alarmmanager编写了一个Android小部件作为更新过程。有时我有一个空指针异常。但所有对象都已初始化 public void UpdateWidget(Context con) { //Log.d("berlinClock", "UpdateWidget="+i); RemoteViews views=new RemoteViews(con.getPackageName(),R.layout.widgetlayout); Calendar c = Cale

我用alarmmanager编写了一个Android小部件作为更新过程。有时我有一个空指针异常。但所有对象都已初始化

public void UpdateWidget(Context con)
{
    //Log.d("berlinClock", "UpdateWidget="+i);
    RemoteViews views=new RemoteViews(con.getPackageName(),R.layout.widgetlayout);
    Calendar c = Calendar.getInstance(); 
    int h = c.get(Calendar.HOUR_OF_DAY);
    int m = c.get(Calendar.MINUTE);

    ComponentName thisWidget = new ComponentName(con,widget.class);

    //update views on remoteView
    // GOT NULLPOINTER EXEPTION IN FOLLOWING LINE
    views.setImageViewResource(R.id.wha1, R.drawable.cgrau);
    views.setImageViewResource(R.id.wha2, R.drawable.cgrau);
    ...
    }
以下是Stacktrace:

java.lang.RuntimeException: Unable to start receiver ms.jung.android.berlinclock.widget: java.lang.NullPointerException
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821)
at android.app.ActivityThread.access$3200(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at ms.jung.android.berlinclock.widget.UpdateWidget(widget.java:96)
at ms.jung.android.berlinclock.widget.onReceive(widget.java:34)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810)

我认为这可能是因为您的RemoteViews对象尚未膨胀

您可以尝试将视图放在布局中,并放大该布局

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RemoteViews view = inflater.inflate(R.layout.widgetlayout,null);

有了这个if条件,它就不会崩溃了,我现在在很多例子中看到了这个解决方案,我认为这是最好的方法。

我应该这样做吗:while(views==null){views=…}?这个膨胀方法不存在:(哦,糟糕,第二个参数应该是ViewGroup对象,但是可选的,如果不想传递对象,则应传递null。我进行了更正。这是不可能的:“无法将视图转换为远程视图”您是否尝试在活动的onStart()方法上运行UpdateWidget方法?onStart()当活动可见时调用,因此在调用视图时视图必须已膨胀。
if(views!=null)
{
    ...
}