[英]Passing Context to Class results in getSystemService Returning Null Pointer Exception
这让我发疯了……在过去的2个小时中,我一直在搜索以解决此问题,但我不知道发生了什么。
我是Android开发的新手,所以也许我缺少一些经验丰富的人可以帮助我的东西。
我只是试图创建一个Notifier类,可以调用该类来向用户发送通知。
public class Notifier {
private Context mContext;
public Notifier(Context mContext){
this.mContext = mContext;
}
NotificationCompat.Builder mBuilder =
(NotificationCompat.Builder) new NotificationCompat.Builder(mContext)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("foo")
.setContentText("bar")
.setOngoing(true);
NotificationManager mNotifyMgr =
(NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE);
public void showNotification(){
mNotifyMgr.notify(001, mBuilder.build());
}
}
主要:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setDisplayShowTitleEnabled(false);
Notifier notifier = new Notifier(getApplicationContext());
}
错误:
01-25 13:11:25.211 27537-27537/net.alexdespain.mediamute E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.alexdespain.mediamute, PID: 27537
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.alexdespain.mediamute/net.alexdespain.mediamute.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at net.alexdespain.mediamute.Notifier.<init>(Notifier.java:27)
at net.alexdespain.mediamute.MainActivity.onCreate(MainActivity.java:25)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
看来该错误是由以下原因引起的:
NotificationManager mNotifyMgr =
(NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE);
但是我不明白为什么mContext将为null ...
NotificationManager mNotifyMgr =
(NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE);
这是带有初始化程序的字段。 初始化程序将在构造函数之前调用。 mContext
为null
。 而是在构造函数中初始化字段(和mBuilder
字段):
public Notifier(Context mContext){
this.mContext = mContext;
mNotifyMgr =
(NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE);
mBuilder =
(NotificationCompat.Builder) new NotificationCompat.Builder(mContext)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("foo")
.setContentText("bar")
.setOngoing(true);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.