当前位置:首页 > 服务端 > Android中SharedPreferences出现NullPointerException的解决办法

Android中SharedPreferences出现NullPointerException的解决办法

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

    
1 import android.app.Service;
2   import android.content.Intent;
3   import android.content.SharedPreferences;
4   import android.content.SharedPreferences.Editor;
5 import android.os.IBinder;
6 import android.preference.PreferenceManager;
7
8 public class DemoService extends Service {
9
10 private static final String MONITOR_RUN_STATE = " MonitorRunState " ;
11 private SharedPreferences preferences =  
      PreferenceManager.getDefaultSharedPreferences( this );
12
13 @Override
14 public IBinder onBind(Intent arg0) {
15 return null ;
16 }
17
18 @Override
19 public void onCreate() {
20 Editor editor = preferences.edit();
21 editor.putBoolean(MONITOR_RUN_STATE, true );
22 editor.commit();
23 super .onCreate();
24 }
25 }

执行的话会在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也应该这样,否则都会出现异常。

作者:周柯文
来源链接:https://www.cnblogs.com/coding-way/archive/2011/04/20/2022658.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/125417.html

分享给朋友:

“Android中SharedPreferences出现NullPointerException的解决办法” 的相关文章