0

有时在重新启动应用程序后,会在 API 级别 > 13 的设备上重置共享首选项。共享首选项设置在应用程序的开头(应用程序的第一个活动)。

代码:

Public void saveCountry(Context context, String countryCode) {

   SharedPreferences settingsActivity  = context.getSharedPreferences("preferences", Context.MODE_PRIVATE);
   SharedPreferences.Editor editor = settingsActivity.edit();
   editor.putString("key_country", countryCode);
   editor.commit();

   setDefaultChannels(context);
}

public String getCountry(Context mContext) {

   SharedPreferences settingsActivity  = mContext.getSharedPreferences("preferences", Context.MODE_PRIVATE);

   String country = settingsActivity.getString("key_country", null);
   return country;
}

我不知道我做错了什么以及为什么会这样。在收到详细活动的推送通知后,我特别注意到了这一点。

4

1 回答 1

1

您是否像这样在应用程序的开头调用保存方法?

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    saveCountry(); 

因为如果是这样,那么每次启动时都会调用它,因此该国家/地区将被countryCode启动时等于的任何数据覆盖,这可能什么都没有。所以也许你应该有一些只在第一次运行时调用的代码。

这是我在我的应用程序中实现它的方式。

    boolean firstRun;
    final SharedPreferences firstRunPref = getSharedPreferences(PREFS_NAME, 0);
    firstRun = firstRunPref.getBoolean("firstRun", true);

    if(firstRun==true){

    saveCountry();

    SharedPreferences.Editor editor3 = firstRunPref.edit();
        editor3.putBoolean("firstRun", false);
        editor3.commit(); 
    } 
于 2013-08-19T21:09:49.343 回答