In my Android project, I have a Service
:
public class MyService extends Service{
//I defined a explicite contructor
public MyService(){
//NullPointerException here, why?
File dir = getDir("my_dir", Context.MODE_PRIVATE);
}
@Override
public void onCreate(){
super.onCreate();
...
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
...
}
}
I know normally, I shouldn't explicitly define a constructor for Android Service
. But in my case, I want to use the constructor to create a directory in my internal storage.
When I try it, I got NullPointerException, which I don't understand why? Could anyone explain to me the reason why I got NullPoineterException when call getDir(...)
in my explicite constructor ?
getDir()
is a method in Context
.
The service is not set up to be used as a Context
until onCreate()
.
Basically, the framework sets up services (and activities for that matter) the following way:
Context
, with appropriate resources for the current configurationonCreate()
on the objectYou cannot do anything that requires the object to be a properly set up Context
at step 1 i.e. during member variable initialization or constructor.
You have to use service lifecycle function onCreate(). onCreate function run only once in a service lifecycle and works as constructor. If you want it to update anywhere then you can put it in onStartCommand(Intent intent, int flags, int startId).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With