如何在android中使用共享首选项
我正在使用此代码保存字符串:如何在android中使用共享首选项,android,sharedpreferences,Android,Sharedpreferences,我正在使用此代码保存字符串: public class MySharedPref { private static final String APP_SHARED_PREFS = "TripDetails"; private SharedPreferences appSharedPrefs; private Editor prefsEditor; public MySharedPref(Context activity) { this.a
public class MySharedPref {
private static final String APP_SHARED_PREFS = "TripDetails";
private SharedPreferences appSharedPrefs;
private Editor prefsEditor;
public MySharedPref(Context activity) {
this.appSharedPrefs = activity.getSharedPreferences(APP_SHARED_PREFS,
Activity.MODE_PRIVATE);
this.prefsEditor = appSharedPrefs.edit();
}
public String getPrefsValue(String value) {
return appSharedPrefs.getString(value, "");
}
public void savePrefsValue(String key, String Value) {
prefsEditor.putString(key, Value);
prefsEditor.commit();
}
public String getImei(String value) {
return appSharedPrefs.getString(value, "");
}
public void saveImei(String key, String Value) {
prefsEditor.putString(key, Value);
prefsEditor.commit();
}
public Boolean checkKey(String Key) {
if (appSharedPrefs.contains(Key))
return true;
else
return false;
}
}
并致电:
MySharedPref mySharedPref = new MySharedPref(context);
mySharedPref.saveImei("Imei", Imei);
但是在一个处理器中。我收到空指针异常。
我不明白为什么会这样。请帮忙
logcat:
java.lang.NullPointerException
09-15 11:46:52.213: W/System.err(17575): at com.example.util.MySharedPref.<init>(MySharedPref.java:14)
09-15 11:46:52.215: W/System.err(17575): at com.example.util.SerialRecieveThread.handleWaitBuffer(SerialThread.java:273)
09-15 11:46:52.216: W/System.err(17575): at com.example.util.SerialRecieveThread.step(SerialThread.java:612)
09-15 11:46:52.219: W/System.err(17575): at com.example.util.SerialRecieveThread.run(SerialThread.java:172)
09-15 11:46:52.220: W/System.err(17575): at java.lang.Thread.run(Thread.java:841)
java.lang.NullPointerException
09-15 11:46:52.213:W/System.err(17575):位于com.example.util.MySharedPref.(MySharedPref.java:14)
09-15 11:46:52.215:W/System.err(17575):位于com.example.util.SerialReceiveThread.handleWaitBuffer(SerialThread.java:273)
09-15 11:46:52.216:W/System.err(17575):位于com.example.util.SerialReceiveThread.step(SerialThread.java:612)
09-15 11:46:52.219:W/System.err(17575):位于com.example.util.SerialReceiveThread.run(SerialThread.java:172)
09-15 11:46:52.220:W/System.err(17575):at java.lang.Thread.run(Thread.java:841)
使用以下方法
步骤1
创建一个应用程序类
public class MyApplication extends Application{
private static Context context;
public void onCreate(){
super.onCreate();
MyApplication.context = getApplicationContext();
}
public static Context getAppContext() {
return MyApplication.context;
}
}
步骤2
在Android清单文件中声明以下内容
<application android:name="com.xyz.MyApplication">
</application>
可能
context
为null
我有use活动,但仍然得到相同的异常。有其他方法吗?如果添加stacktraceHandler,会出现什么异常?什么处理程序?更新了日志cat,请查看。在作用域中无法访问LoginActivity类型的封闭实例:(@Developer请尝试我编辑的答案。由于您使用的是thread,然后是SharedReferences,您需要的是ApplicationContext而不是activity Context。我很乐意为您提供帮助…:)
MySharedPref mySharedPref = new MySharedPref(MyApplication.getAppContext());
mySharedPref.saveImei("Imei", Imei);