您的位置:首页 > 移动开发 > Android开发

Android中SharedPreferences出现NullPointerException的解决办法

2011-04-20 19:15 465 查看
这几天写Service组件的时候,莫名其妙老出现NullPointerException异常,主要经过是这样的:在Activity中创建Preferences文件,然后在Service中使用这个文件,出错的源代码如下:

import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.IBinder;
import android.preference.PreferenceManager;

public class DemoService extends Service {

private static final String MONITOR_RUN_STATE = "MonitorRunState";
private SharedPreferences preferences =       PreferenceManager.getDefaultSharedPreferences(this);

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public void onCreate() {
Editor editor = preferences.edit();
editor.putBoolean(MONITOR_RUN_STATE, true);
editor.commit();
super.onCreate();
}
}


执行的话会在11行出现空指针异常。

结果google半天后发现问题所在,

PreferenceManager.getDefaultSharedPreferences(this)这句话不应该放在初始化Service类或子类的成员变量中,也就是说,应该把它放在onCreate()函数中,上面代码可以改成这样:

import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.IBinder;
import android.preference.PreferenceManager;

public class DemoService extends Service {

private static final String MONITOR_RUN_STATE = "MonitorRunState";
private SharedPreferences preferences = null;

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public void onCreate() {
preferences = PreferenceManager.getDefaultSharedPreferences(this);
Editor editor = preferences.edit();
editor.putBoolean(MONITOR_RUN_STATE, true);
editor.commit();
super.onCreate();
}
}


其中红字是更改过的地方。

不光是Service,Activity也应该这样,否则都会出现异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐