我正在开发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来自哪里,所以任何提示都会受到高度赞赏。
答案 0 :(得分:0)
java.lang.NullPointerException由于null context而发生异常。
所以,使用在onMessage方法中传递的上下文
protected void onMessage(final Context context, Intent intent)
在GCMIntentService类
中使用此上下文