gpt4 book ai didi

java - 将 Context 传递给类会导致 getSystemService 返回空指针异常

转载 作者:行者123 更新时间:2023-12-01 19:59:44 31 4
gpt4 key购买 nike

这让我发疯......我已经搜索了过去 2 个小时试图解决这个问题,但我不知道发生了什么。

我对 Android 开发还比较陌生,所以也许我缺少一些更有经验的人可以帮助我的东西。

我只是想创建一个通知程序类,我可以调用它来向用户发送通知。

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);

这是一个带有初始值设定项的字段。初始化程序将在构造函数之前调用。此时,mContextnull。改为在构造函数内初始化字段(以及 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);
}

关于java - 将 Context 传递给类会导致 getSystemService 返回空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449639/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com