Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Null Pointer in getApplicationContext()

I'm trying the following piece of code, where a service is implementing my listener:

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

Now, the toast inside onCreate() is working fine, but that inside the overridden method is throwing the following 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)

I guess I'm missing some important java concept. Cant we use getApplicationContext() inside an overridden method ?

like image 721
Saurabh Verma Avatar asked Jan 03 '12 13:01

Saurabh Verma


1 Answers

You should try to avoid using getApplicationContext() as much as possible, as this will highly increase the chance of getting Force Closes.

Instead use YourClass.this, in this case MyListenerClass.this.

I guess in this example it doesn't work, because getApplicationContext() is called after stopSelf()

like image 50
Force Avatar answered Sep 27 '22 22:09

Force