问题描述
我想更新前台通知的 ContentText,以便 ContentText 显示最新产品的日期。
我使用两个全局变量来保持对原始 Builder 和 notificationmanager 的引用。 UpdateNotificationContent() 是从另一个类调用的,我已将更新的文本提供给 SetContentText 并调用 notificationmanager.notify 以尝试更新构建器。
以下行(UpdateNotificationContent 的最后一行)出现错误:notificationmanager.Notify(NOTIFICATION_SERVICE_ID,notificationBuilder.Build());
java.lang.NullPointerException: '尝试在空对象引用上调用虚拟方法 'android.content.res.Resources android.content.Context.getResources()'
class MyService : Service
{
private Handler handler;
private Action runnable;
private bool isstarted;
private int DELAY_BETWEEN_LOG_MESSAGES = 5000;
private int NOTIFICATION_SERVICE_ID = 1001;
private int NOTIFICATION_AlARM_ID = 1002;
private string NOTIFICATION_CHANNEL_ID = "1003";
private string NOTIFICATION_CHANNEL_NAME = "Update Notifications";
private NotificationCompat.Builder notificationBuilder;
private notificationmanager notificationmanager
private void dispatchNotificationThatServiceIsRunning()
{
Intent intent = new Intent(this,typeof(Customreceiver));
PendingIntent pendingIntent = PendingIntent.Getbroadcast(
this,1,intent,PendingIntentFlags.UpdateCurrent
);
string contextText = App.latestProduct.ProductSaveTime.ToString();
}
var notification = new Notification.Builder(this,default)
.SetChannelId("location_notification")
.SetContentTitle("AppName")
.SetContentText(contextText)
.SetSmallIcon(Resource.Drawable.icon)
.SetVisibility(NotificationVisibility.Secret)
.SetContentIntent(pendingIntent)
.Setongoing(true)
.Build();
// Enlist this instance of the service as a foreground service
StartForeground(NOTIFICATION_SERVICE_ID,notification);
var notificationmanager = (notificationmanager)GetSystemService(NotificationService);
notificationmanager.Notify(NOTIFICATION_SERVICE_ID,notification);
}
// every 5 seconds push a notificaition
private void dispatchNotificationThatAlarmIsGenerated()
{
Intent intent = new Intent(this,PendingIntentFlags.UpdateCurrent
);
string contextText = App.latestProduct.ProductSaveTime.ToString();
notificationBuilder = new NotificationCompat.Builder(this,"default")
.SetAutoCancel(false)
.SetSmallIcon(Resource.Drawable.icon)
.SetContentIntent(pendingIntent)
.SetContentTitle("AppName")
.SetContentText(contextText);
notificationmanager = (notificationmanager)GetSystemService(NotificationService);
notificationmanager.Notify(NOTIFICATION_AlARM_ID,notificationBuilder.Build());
}
public void UpdateNotificationContent()
{
string contextText = App.latestProduct.ProductSaveTime.ToString();
notificationBuilder = new NotificationCompat.Builder(this,"default")
.SetContentText(contextText);
notificationmanager.Notify(NOTIFICATION_SERVICE_ID,notificationBuilder.Build());
}
}
解决方法
不要创建新的 NotificationCompat.Builder。如果您只想更新内容,请使用具有相同 id(NotificationCompat.Builder
) 的相同 NOTIFICATION_SERVICE_ID
设置来覆盖。
变化:
string contextText = App.latestProduct.ProductSaveTime.ToString();
notificationBuilder = new NotificationCompat.Builder(this,"default")
.SetContentText(contextText);
notificationManager.Notify(NOTIFICATION_SERVICE_ID,notificationBuilder.Build());
致:
string contextText = "update";//I do not have you contextText,so i use string instead
notificationBuilder .SetContentText(contextText);
notificationManager.Notify(NOTIFICATION_SERVICE_ID,notificationBuilder .Build());