繁体   English   中英

将上下文传递给Class会导致getSystemService返回空指针异常

[英]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);

这是带有初始化程序的字段。 初始化程序将在构造函数之前调用。 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM