如何修复此错误?
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
ACTIVITY.onNewIntent(Adult1Activity.java:243)
这是包含此错误的方法:
private void ExtendedNotification(String time) {
Intent resultIntent = new Intent(this, Adult1Activity.class);
resultIntent.putExtra("A", "restore");
PendingIntent restoreIntent = PendingIntent.getActivity(Adult1Activity.this, 0, resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
resultIntent.putExtra("A", "close");
PendingIntent closeIntent = PendingIntent.getActivity(Adult1Activity.this, 2, resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
final NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(Adult1Activity.this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("App Name")
.setContentText(time)
.setAutoCancel(true)
.addAction(new NotificationCompat.Action(R.mipmap.ic_launcher, "Restore", restoreIntent))
.addAction(new NotificationCompat.Action(R.mipmap.ic_launcher, "Close", closeIntent))
.setContentIntent(restoreIntent);
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = notificationBuilder.build();
notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT;
notificationManager.notify(0, notification);
}
@Override
protected void onNewIntent(Intent intent) {
switch (intent.getStringExtra("A")) {
case "restore":
tv.setText(timeString);
break;
case "close":
countDownTimer.cancel();
isRunning = false;
notificationManager.cancel(0);
CloseApp();
break;
}
我认为问题不在于使用上下文。
我的应用程序中有一个带有StopBTN的计数器,我使用2个按钮创建通知。其中之一是RestoreBTN,它显示了我的活动类。现在,当我单击StopBTN时,显示此错误。
编辑:handleIntent
方法中存在NullPointer错误。
private void handleIntent(Intent intent) {
final String a = intent.getStringExtra(EXTRA_NOTE);
if (a != null) {
switch (a) {
case NOTE_RESTORE:
tv.setText(timeString);
notificationManager.cancel(notification_id);
break;
case NOTE_CLOSE:
countDownTimer.cancel();
isRunning = false;
notificationManager.cancel(notification_id);
break;
}
}
您可能需要为额外的键设置一个常量,以避免打字错误或看起来像是输入错误的语言。此外,为动作设置常量也很好
private static final String EXTRA_A = "A";
private static final String A_RESTORE = "restore";
private static final String A_CLOSE = "close";
我不知道您是否这样做,但不能手动调用onNewIntent()
。此外,如果您的活动在单击通知时被销毁,则可能不会调用onNewIntent()
。您需要创建两个条目来检查意图,一个用于当活动已经运行并且您获得onNewIntent()
时,另一个用于如果它被重新创建并且您在onCreate()中获得意图
@Override
protected void onCreate(Bundle b) {
super.onCreate(b);
// init views and stuff, and in final onCreate line handle the intent
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); // Make sure to call super
handleIntent(intent);
}
崩溃意味着你的意图并不真的包含额外的A。您不能在空字符串上使用< code>switch,因此如果您检查A是否为空,那么您会很安全。
private void handleIntent(Intent intent) {
final String a = intent.getStringExtra(EXTRA_A);
if (a != null) {
switch (a) {
case A_RESTORE:
...
case A_CLOSE:
...
不要为不同的< code >挂起内容修改相同的意图。它们是可变的,并且< code>getActivity()不会创建防御性副本。
final Intent resultIntentRestore = new Intent(this, Adult1Activity.class);
resultIntentRestore.putExtra(EXTRA_A, A_RESTORE);
PendingIntent restoreIntent = PendingIntent.getActivity(Adult1Activity.this,
0, resultIntentRestore, PendingIntent.FLAG_UPDATE_CURRENT);
final Intent resultIntentClose = new Intent(this, Adult1Activity.class);
resultIntentClose.putExtra(EXTRA_A, A_CLOSE);
PendingIntent closeIntent = PendingIntent.getActivity(Adult1Activity.this,
2, resultIntentClose, PendingIntent.FLAG_UPDATE_CURRENT);
我必须在tomcat 7中部署我的app.war文件。的。war文件名后面是它的版本号。这里我需要设置一个上下文路径,这样实际的url将只包含应用程序名(没有版本号)。 我的要求是,服务器中不应该有编辑.xml。 这是我的背景。xml如下所示。 context.xml放在war at /META-INF文件夹中。谁能告诉我我错在哪里?
在传统的web.xml类型配置中,您可以像这样配置上下文参数 web.xml 这是如何在Spring启动中实现的。我有一个需要参数的过滤器。 我使用的是,并包含了
我是一个Spring新手,正在制作一个Spring Web应用程序(不是Spring-boot,这有多大区别?)。部署在Tomcat7服务器上。 应用程序已启动并运行。我的问题是只能通过标准URL访问: http://mycompany.com:8081/cwing-0.0.3-snapshot/index.html 以下操作不起作用:http://mycompany.com:8081/cwing
我希望从服务器加载数据并显示到我的应用程序中(
问题内容: 我想通过请求中的项目填充日志记录上下文,例如:。我以为我可以在中间件的处理程序中覆盖Log类型。虽然它似乎不起作用,但我不确定为什么! 您能看到为什么在同一请求中对IIUC应该没有影响吗? 问题答案: 您需要对记录程序进行请求范围的检查。每当有新的连接进入时,就为整个处理程序全局设置它,这意味着您要进行数据争用以及通常不受欢迎的行为。 对于请求范围的上下文,请求中的嵌入是完美的。您可以