我在使用sharedPref的活动之间传递一个字符串。 我正在努力使我的代码更有效,而且我有一个我无法弄清楚的奇怪问题。
我在MainActivity.class中的代码:
@覆盖 protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.activity_main);
//if statement for the first run of the app, else statement uses the defined city.
if (SharedPref.getCity().equals("")) {
} else {
cityText = (TextView) findViewById(R.id.prefCity);
cityText.setText(SharedPref.getCity());
}
我的SharedPref.java:
public class SharedPref {
private static SharedPreferences mSharedPreferences;
//sharedPref Manager.
public SharedPref(final Context context) {
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
}
public static void setCity(String item) {
mSharedPreferences.edit().putString("city", item).apply();
}
public static String getCity() {
return mSharedPreferences.getString("city", "");
}
}
如您所见,在我的MainActivity.class中,我通过“SharedPref.getCity()”访问数据。 直接来自类,这就是我使用静态方法的原因。 但应用程序崩溃了。 奇怪的是,如果我在MainActivity中初始化我的sharedpref,就像这样:
SharedPref sharedPref = new SharedPref(getBaseContext());
那么应用程序工作得很好,即使是sharedPref也是一个甚至不使用过的变量!
我错过了什么?p.s这是我的logcat pic:
提前感谢您的帮助。
答案 0 :(得分:1)
最初共享首选项甚至不包含var“city”,所以最初条件应该是sharepref.contains(“city”),然后在进一步的迭代中检查它的值。
答案 1 :(得分:0)
在setCity
方法中,您使用的mSharedPreferences
尚未初始化。
您需要创建SharedPref
类的新实例,并使setCity
无静态。
或者如果您希望setCity
是静态的,可以执行以下操作:
public static void setCity(Context context, String item) {
if(mSharedPreferences == null)
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
mSharedPreferences.edit().putString("city", item).apply();
}
答案 2 :(得分:0)
看看这段代码:
public static final String SETTINGS_NAME = "MY_SETTINGS";
public static final String FB_TOKEN = "FB_TOKEN";
public static final String LANGUAGE = "LANGUAGE";
public static boolean writeString(Context context, String name, String value)
{
SharedPreferences settings = context.getSharedPreferences(SETTINGS_NAME, 0);
Editor editor = settings.edit();
editor.putString(name, value);
return editor.commit();
}
public static boolean writeInt(Context context, String name, int value)
{
SharedPreferences settings = context.getSharedPreferences(SETTINGS_NAME, 0);
Editor editor = settings.edit();
editor.putInt(name, value);
return editor.commit();
}
public static String readString(Context context, String name, String defValue)
{
SharedPreferences settings = context.getSharedPreferences(SETTINGS_NAME, 0);
return settings.getString(name, defValue);
}
public static int readInt(Context context, String name, int defValue)
{
SharedPreferences settings = context.getSharedPreferences(SETTINGS_NAME, 0);
return settings.getInt(name, defValue);
}
请注意" SETTINGS_NAME"是架构的名称。其他静态名称只是为了让它更容易。