Java 应用程序重新启动后,SharedReference不存储数据

Java 应用程序重新启动后,SharedReference不存储数据,java,android,sharedpreferences,Java,Android,Sharedpreferences,主要活动: public class CityPreference{ SharedPreferences prefs; public CityPreference(Activity activity) { prefs = activity.getPreferences(Activity.MODE_PRIVATE); } public String getCity(){ String defaultStr = "Helsinki,FI"; return prefs.get

主要活动:

public class CityPreference{
SharedPreferences prefs;

public CityPreference(Activity activity) {
    prefs = activity.getPreferences(Activity.MODE_PRIVATE);
}
public String getCity(){
    String defaultStr = "Helsinki,FI";
    return prefs.getString("city", defaultStr);
}

public void setCity(String city){
    prefs.edit().putString("city", city).commit();
}
}
如何更改字符串:

   CityPreference cityprefs = new CityPreference(MainActivity.this);
    renderWeatherData(cityprefs.getCity());
所以,我想做的是,每当我重新启动应用程序时。它将永远保持稳定

 private void showInputDialog(){
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle(getResources().getString(R.string.change_city));

    final EditText cityInput = new EditText(MainActivity.this);
    cityInput.setInputType(InputType.TYPE_CLASS_TEXT);
    cityInput.setHint("Helsinki,FI");
    builder.setView(cityInput);
    builder.setPositiveButton(getResources().getString(R.string.submitBtn), new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            CityPreference cityPref = new CityPreference(MainActivity.this);
            cityPref.setCity(cityInput.getText().toString());

            String newCity = cityPref.getCity();
            renderWeatherData(newCity);
        }
    });
    builder.show();
}
我应该清除数据存储吗?还是有更好的方法?
谢谢你的帮助

SharedReference的初始化错误,请使用
GetSharedReferences
代替
getPreference()
,并给出您的
SharedReference的名称

试试这个

defaultStr to prefs.getString();

若你们希望每次应用启动时都有默认的城市值,那个么就不要使用共享首选项。在主活动中为城市使用LOCAL变量。

或者使用命名文件:

SharedPreferences sharedPref = getSharedPreferences("PreferenceFile", Context.MODE_PRIVATE);
或使用默认文件:

SharedPreferences pref = getSharedPreferences("filename", MODE_PRIVATE);

除了其他用户所说的(例如,请参见@KulsDroid)答案之外,无论您如何阅读和初始化您的首选项,您都应该通过向项目中添加自定义
应用程序
类来更改应用程序的启动方式

应用程序
类有一个名为
onCreate()
的重写方法,您可以使用该方法在应用程序加载时和用户能够交互之前执行有用的操作。因此,在您的特定情况下,您应该在
onCreate()方法中调用类似于
CityPreferences.setCity(myDefaultCity)
的内容

你可以找到官方文件和一些相关的答案


这也是一个很好的教程,您可以使用它来学习如何构建自己的应用程序类。

我认为您必须使用GetSharedReferences而不是getPreferences(…)getPreferences仅适用于单个活动我不明白。如果你不想在应用程序重新启动时保留城市,为什么要使用SharedReferences?你还没有为你的SharedReference文件命名。请在第一段代码之前添加一些上下文,以及一些关于用户如何和为什么在共享prefs中更改此值的行,以解决您的问题。
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);