Reup: Notification (NPE Issue)

2019-09-05 10:19发布

问题:

I reworked the code to my notification class. Its spitting an Null pointer Exception at me every time I go to run it. So once more here is the code:

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.RemoteViews;

public class kickStart extends Activity {
NotificationManager nm;
Context context = this;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Notification notification = new Notification();
    RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.note);
    contentView.setImageViewResource(R.id.icon, R.drawable.ic_launcher);
    contentView.setTextViewText(R.id.title, "Custom notification");
    contentView.setTextViewText(R.id.text, "This is a custom layout");
    notification.contentView = contentView;
    Intent notificationIntent = new Intent(this, MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    notification.contentIntent = contentIntent;
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    int CUSTOM_VIEW_ID = 10;
    nm.notify(CUSTOM_VIEW_ID, notification);
}
}

Now for the question: Why am I getting NPE... And how do I fix it.

HERE IS THE LOGCAT

07-21 17:58:33.360: W/dalvikvm(6511): threadid=1: thread exiting with uncaught exception (group=0x40018560)
07-21 17:58:33.360: E/AndroidRuntime(6511): FATAL EXCEPTION: main
07-21 17:58:33.360: E/AndroidRuntime(6511): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.this/com.example.this.kickStart}: java.lang.NullPointerException
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.os.Looper.loop(Looper.java:130)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.app.ActivityThread.main(ActivityThread.java:3683)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at java.lang.reflect.Method.invokeNative(Native Method)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at java.lang.reflect.Method.invoke(Method.java:507)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at dalvik.system.NativeStart.main(Native Method)
07-21 17:58:33.360: E/AndroidRuntime(6511): Caused by: java.lang.NullPointerException
07-21 17:58:33.360: E/AndroidRuntime(6511):     at com.example.this.kickStart.onCreate(kickStart.java:29)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-21 17:58:33.360: E/AndroidRuntime(6511):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
07-21 17:58:33.360: E/AndroidRuntime(6511):     ... 11 more

回答1:

You haven't initialized nm:

nm.notify(CUSTOM_VIEW_ID, notification);

You should add:

nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

before trying to use nm. Hope that helps!

From LogCat

For future reference these two lines:

Caused by: java.lang.NullPointerException
    at com.example.this.kickStart.onCreate(kickStart.java:29)

Tell us that the NPE is on line 29 in kickStart.java, specifically kickStart.onCreate(). Using this information you should be able to find you NPEs faster than any of us, since we don't have line numbers. :)