getApplicationContext()中的空指针

我正在尝试以下一段代码,其中一个服务正在实现我的侦听器:

public class MyListenerClass extends Service implements MyListenerInterface { public void onCurrencyRecieved(MyEventClass event) { System.out.println("Coins Recieved - Listener Successful"); stopSelf(); Toast toast = Toast.makeText(getApplicationContext(), "Service Stopped", Toast.LENGTH_LONG); toast.show(); } @Override public void onCreate() { Toast toast = Toast.makeText(getApplicationContext(),"Service started", Toast.LENGTH_LONG); toast.show(); super.onCreate(); } 

现在,onCreate()里面的敬酒工作正常,但是重写的方法里面抛出了下面的exception:

 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): java.lang.NullPointerException 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.test.listenertest1.MyListenerClass.onCurrencyRecieved(MyListenerClass.java:28) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.test.listenertest1.MyEventGenerator.generateEvent(MyEventGenerator.java:34) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.test.listenertest1.MyEventGenerator.<init>(MyEventGenerator.java:16) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.test.listenertest1.NewActivity.onKeyDown(NewActivity.java:33) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.view.KeyEvent.dispatch(KeyEvent.java:1037) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.app.Activity.dispatchKeyEvent(Activity.java:2046) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1631) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2368) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2338) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.view.ViewRoot.handleMessage(ViewRoot.java:1641) 01-03 18:52:35.740: ERROR/AndroidRuntime(2388): at android.os.Handler.dispatchMessage(Handler.java:99) 

我想我错过了一些重要的Java概念。 我们不能在重写的方法中使用getApplicationContext()吗?

  • Android服务死亡
  • 如何在中午每天运行一个服务,并在每一次启动
  • 如何创build一个android本地服务,并使用活页夹进行沟通?
  • 在Android服务中检测“home button pressed”事件显示一个用户界面(类似于facebook的聊天头)
  • 前台服务正在被Android杀死
  • 如何检测用户何时启动另一个应用程序? (机器人)
  • Android上的BOOT_COMPLETED和QUICKBOOT_POWERON之间的区别
  • 打开接收器/服务的屏幕
  • 你应该尽量避免使用getApplicationContext() ,因为这会极大地增加获得强制closures的机会。

    而是使用YourClass.this ,在这种情况下MyListenerClass.this

    我猜在这个例子中它不起作用,因为 stopSelf() 之后 getApplicationContext() stopSelf()

    不知道如果你可以,因为这似乎是在一个服务,但如果它在onCreate (这个代码path实际上是调用),你可以轻松地保存上下文到本地variables在onCreate ,然后在你的方法中使用它。

    敬酒只能添加到活动像上下文。

    你是否宣称它是一个新的进程,在这种情况下你可能会得到空指针exception

     android:process=":MyListenerClass" 

    在进程上下文getApplicationContext()将无法正常工作。

    您可以通过检查logcat来validation您的Activity和服务的TID和PID是否相同。

    尝试给MyListenerClass.thisYourActivity.this

    例如。

     Toast.makeText(MyListenerClass.this, "Service Stopped", Toast.LENGTH_LONG).show(); 

    您必须创build活动的上下文并传递该上下文。

      public static void pushList(Activity context){ static Context = mConext; protected void onPostExecute(String result) { Toast toast=Toast.makeText(mConext,"Succefully Updated Profile",Toast.LENGTH_LONG); toast.show(); } } 

    这真的对我有用。