0

我正在使用cordova 开发一个Android 和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);

我真的不能说空指针异常来自哪里,所以任何提示都将受到高度赞赏。

4

1 回答 1

0

在您的代码中 java.lang.NullPointerException 由于空上下文而发生异常..

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

 protected void onMessage(final Context context, Intent intent) 

在您的 GCMIntentService 类中使用此上下文

于 2015-02-25T07:26:09.980 回答