我试图访问服务中的SharedPreferences。
public class LocationService extends Service implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {
Context context = getApplicationContext();
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
...
但是我收到了这个错误:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate service us.keithirwin.myapp.LocationService: java.lang.NullPointerException
...
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
at us.keithirwin.myapp.LocationService.<init>(LocationService.java:31)
...
LocationService.java:31引用Context context = getApplicationContext();
。
我曾经使用this
作为上下文,即
PreferenceManager.getDefaultSharedPreferences(this);
这条线也开始出现空位。我的研究使我使用getApplicationContext()
作为我的背景。但是我转向的每一个方面都是空的。
LocationService.<init>
听起来像构造函数。其他帖子似乎说我无法在那里调用偏好。但是,如果我尝试在onCreate中创建sharedPref,它只能在该方法中使用。有没有办法在整个服务中提供首选项?
答案 0 :(得分:3)
LocationService.<init>
听起来像构造函数。
实际上,它是数据成员的初始化程序。
但是,如果我尝试在onCreate中创建sharedPref,它只能在该方法中使用。
欢迎您在onCreate()
之外声明数据成员。在onCreate()
:
public class LocationService extends Service {
private SharedPreferences sharedPref;
public void onCreate() {
super.onCreate();
sharedPref=PreferenceManager.getDefaultSharedPreferences(this);
}
// other cool stuff here
}
答案 1 :(得分:1)
尝试替换
Context ctx = getApplicationContext();
与
Context ctx = this;