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()吗?

Solutions Collecting From Web of "getApplicationContext()中的空指针"

你应该尽量避免使用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(); } } 

这真的对我有用。