在通知栏中单击通知后的NullPointerException(PendingIntent)

时间:2016-03-30 10:51:06

标签: android nullpointerexception android-pendingintent

我正在努力让我的PendingIntent正常工作,但每当我点击通知抽屉中的notification时,我的应用就会崩溃。

所以基本上我有一个名为 CustomerCurrentlyServing.class 的java类,当它被加载时,它会检索从前一个活动传递的所有字符串,如下所示:

    queueNo = String.valueOf(getIntent().getExtras().getInt(Constants.EX_MSG_QUEUE_NO));
    queueKey = getIntent().getExtras().getString(Constants.EX_MSG_QUEUE_KEY);
    shopName = getIntent().getExtras().getString(Constants.EX_MSG_SHOP_NAME);
    shopKey = getIntent().getExtras().getString(Constants.EX_MSG_SHOP_KEY);
    customerid = getIntent().getExtras().getString(Constants.EX_MSG_CUSTOMER_ID);

我实现了一个通知方法,如下所示:

public void showNotification() {
    Intent intent = new Intent(getApplicationContext(), CustomerCurrentServing.class);
    PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, CustomerCurrentServing.class), 0);intent.putExtra(Constants.EX_MSG_QUEUE_NO,queueNo);
        intent.putExtra(Constants.EX_MSG_QUEUE_NO,queueNo);
    intent.putExtra(Constants.EX_MSG_QUEUE_KEY,queueKey);
    intent.putExtra(Constants.EX_MSG_SHOP_NAME,shopName);
    intent.putExtra(Constants.EX_MSG_SHOP_KEY,shopKey);
    Resources r = getResources();
    Notification notification = new NotificationCompat.Builder(this)
            .setTicker(r.getString(R.string.notification_title))
            .setSmallIcon(android.R.drawable.ic_menu_report_image)
            .setContentTitle(r.getString(R.string.notification_title))
            .setContentText(r.getString(R.string.notification_text))
            .setContentIntent(pi)
            .setAutoCancel(true)
            .build();

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(0, notification);

当用户点击通知抽屉中的通知时,它基本上是打开同一个类。但是,每当我点击通知时它都会崩溃,并且该行上的错误是 NullPointerException

        queueNo = String.valueOf(getIntent().getExtras().getInt(Constants.EX_MSG_QUEUE_NO));

知道如何解决这个错误吗?我一直试图解决这个错误一个星期,非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您应该将Extra放在传递给PendingIntent

的Intent上
   Intent intent = new Intent(getApplicationContext(), CustomerCurrentServing.class);
    intent.putExtra(Constants.EX_MSG_QUEUE_NO,queueNo);
    intent.putExtra(Constants.EX_MSG_QUEUE_NO,queueNo);
    intent.putExtra(Constants.EX_MSG_QUEUE_KEY,queueKey);
    intent.putExtra(Constants.EX_MSG_SHOP_NAME,shopName);
    intent.putExtra(Constants.EX_MSG_SHOP_KEY,shopKey);
    PendingIntent pi = PendingIntent.getActivity(this, 0, intent , 0);

答案 1 :(得分:0)

WebApiConfig.cs

这里传递PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, CustomerCurrentServing.class), 0);

的新实例

你应该传递已经创建的实例,即

Intent

并在创建Intent intent = new Intent(getApplicationContext(), CustomerCurrentServing.class); PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0); 对象之前写下所有putExtras

答案 2 :(得分:0)

在代码的这一部分中,您将额外内容添加到错误的意图中,您正在创建一个intent,然后创建一个新的,您传递给挂起的intent!

你应该做的是:

Intent intent = new Intent(getApplicationContext(), CustomerCurrentServing.class); PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0); intent.putExtra(Constants.EX_MSG_QUEUE_NO,queueNo); intent.putExtra(Constants.EX_MSG_QUEUE_KEY,queueKey); intent.putExtra(Constants.EX_MSG_SHOP_NAME,shopName); intent.putExtra(Constants.EX_MSG_SHOP_KEY,shopKey);

并没有像您在未决意图中那样创建新意图: PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, CustomerCurrentServing.class), 0); intent.putExtra(Constants.EX_MSG_QUEUE_NO,queueNo);

如果你这样做,你就是把第一个意图的额外内容放在第一个意图上,然后将一个全新的附加内容传递给你的待定意图,这样当用户点击通知并打开活动时,活动会尝试并获得额外的不存在因此给出一个空指针。