Android中SharedPreferences出现NullPointerException的解决办法
2011-04-20 19:15
465 查看
这几天写Service组件的时候,莫名其妙老出现NullPointerException异常,主要经过是这样的:在Activity中创建Preferences文件,然后在Service中使用这个文件,出错的源代码如下:
执行的话会在11行出现空指针异常。
结果google半天后发现问题所在,
PreferenceManager.getDefaultSharedPreferences(this)这句话不应该放在初始化Service类或子类的成员变量中,也就是说,应该把它放在onCreate()函数中,上面代码可以改成这样:
其中红字是更改过的地方。
不光是Service,Activity也应该这样,否则都会出现异常。
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也应该这样,否则都会出现异常。
相关文章推荐
- Android中SharedPreferences出现NullPointerException的解决办法【转】
- RecyclerView.addFocusables出现空指针异常NullPointerException的解决办法
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- Android使用butterknife注解出现nullPointerException解决
- Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPointerException 错误的集中原因及解决办法
- Android开发中遇到Java.lang.NullPointerException解决办法
- Android中利用NetworkInfo判断网络状态时出现空指针(NullPointerException)问题的解决方法
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- java 出现NullPointerException的原因及解决办法
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPointerException 错误的集中原因及解决办法
- android编程中遇到的关于 java.lang.NullPointerException错误的原因及解决办法
- Android中利用NetworkInfo判断网络状态时出现空指针(NullPointerException)问题解决
- JavaWeb学习(5.5)---在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- Java JSONObject数组使用时出现"nullpointerexception"的解决办法
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
- Android 中读取SD卡文件时抛出NullPointerException错误解决办法
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法