收到推送并关闭应用时,Android应用会崩溃

时间:2013-09-23 14:38:11

标签: android cordova nullpointerexception push google-cloud-messaging

我正在开发Android&带有cordova的iOS应用程序。当前版本有2.2.0。我有以下Java代码来显示推送通知:

private void putNotification(String title, String message){
        try{
            Log.w("Push", "putNotification");
            MainActivity context = MainActivity.getAppContext();
            Log.w("Push", "context is set");

                NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                Log.w("Push", "notificationManager is set");
                Notification note = new Notification(R.drawable.icon, title, System.currentTimeMillis());
            Intent notificationIntent = new Intent(context, MainActivity.class);
                notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                       Intent.FLAG_ACTIVITY_SINGLE_TOP);
                PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
                note.setLatestEventInfo(context, title, message, pendingIntent);
                note.defaults |= Notification.DEFAULT_SOUND;
            note.defaults |= Notification.DEFAULT_VIBRATE;
            note.defaults |= Notification.DEFAULT_LIGHTS;
            note.flags |= Notification.FLAG_AUTO_CANCEL;
                notificationManager.notify(0, note);
        } catch(Exception e){
            Log.w("Push failed", e); 
        }
    }

当应用程序在后台运行时,代码可以正常运行。但是如果应用程序完全关闭,我将收到以下LogCat错误,并且没有显示推送:

 09-23 16:30:24.725: W/Push(3276): putNotification
 09-23 16:30:24.725: W/Push(3276): context is set
 09-23 16:30:24.725: W/Push failed(3276): java.lang.NullPointerException
 09-23 16:30:24.725: W/Push failed(3276):   at ch.seika.lakers.GCMIntentService.putNotification(GCMIntentService.java:105)
 09-23 16:30:24.725: W/Push failed(3276):   at ch.seika.lakers.GCMIntentService.onMessage(GCMIntentService.java:46)
 09-23 16:30:24.725: W/Push failed(3276):   at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:223)
 09-23 16:30:24.725: W/Push failed(3276):   at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
 09-23 16:30:24.725: W/Push failed(3276):   at android.os.Handler.dispatchMessage(Handler.java:99)
 09-23 16:30:24.725: W/Push failed(3276):   at android.os.Looper.loop(Looper.java:137)
 09-23 16:30:24.725: W/Push failed(3276):   at android.os.HandlerThread.run(HandlerThread.java:61)

第105行如下: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

我真的不能说Null Pointer Exception来自哪里,所以任何提示都会受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

代码中的

java.lang.NullPointerException由于null context而发生异常。

所以,使用在onMessage方法中传递的上下文

 protected void onMessage(final Context context, Intent intent) 

在GCMIntentService类

中使用此上下文