getApplicationContext()抛出nullpointexception

时间:2015-12-20 16:58:05

标签: java android android-service

我试图访问服务中的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,它只能在该方法中使用。有没有办法在整个服务中提供首选项?

2 个答案:

答案 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;