【问题标题】:Getting shared preferences data of another class获取另一个类的共享偏好数据
【发布时间】:2013-09-22 19:30:30
【问题描述】:

我正在尝试制作收藏夹列表。我有一个名为 Animal 的课程和另一个名为 Favorites 的课程。收藏夹数组列表是在收藏夹类中创建的。我可以从 Animal 访问收藏夹数组列表

public static Favorites addfavorite = new Favorites();

并将项目添加到收藏夹列表中。

作为从 Animal 类添加到收藏夹列表的项目,我需要保存这个数组列表。我试图用 SharedPreferences 来做到这一点。它几乎可以工作。添加项目并完全关闭并重新打开应用程序后,我遇到以下问题。

问题:

如果我打开应用程序并转到 Animal 类,而没有先打开收藏夹类并查看以前添加的项目(因此尚未调用收藏夹的 OnCreate() 方法),如果我添加或不添加当我在动物类中时,将新项目添加到收藏夹列表(没关系),当我打开“收藏夹”类时,如果添加了新项目,则先前添加的项目将被删除并替换为新添加的项目,如果不是列表变空。 (我不希望这样,我需要同时拥有旧项目和新项目)但是如果我首先打开收藏夹类并查看先前添加的项目(因此为“收藏夹”调用了“OnCreate()”方法)然后去到 Animal 类并添加新项目,新旧项目都列在“收藏夹”中。 (这就是我想要实现的目标)

我该如何解决这个问题?

编辑:来自 Animal 的一些代码

 @Override
protected void onPause() {
    // TODO Auto-generated method stub

    prefs = getSharedPreferences(prefName, MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putStringSet(PREFS_NAME, 
                 new HashSet<String>(addfavorite.getFavorites()));
    editor.commit();
    super.onPause();

}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    prefs = getSharedPreferences(prefName, MODE_PRIVATE);
    favoritesanimal = new ArrayList<String>(prefs.getStringSet(PREFS_NAME,
            new HashSet<String>()));

    super.onResume();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);
    outState.putStringArrayList(PREFS_NAME, addfavorite.getFavorites());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState != null
            && savedInstanceState.containsKey(PREFS_NAME)) {
        favoritesanimal = savedInstanceState.getStringArrayList(PREFS_NAME);

    }
}

favoritesanimal 是我创建的任意数组列表。它与Favorite 类或Favoriteslist 无关它实际上没用。所以 onPause() 和 onResume 方法目前什么都不做。

这是来自收藏夹的代码(注意我在两个类中使用相同的 sharedpreferences 属性)

  @Override
public void onCreate(Bundle savedInstanceState) {

    prefs = getSharedPreferences(prefName, MODE_PRIVATE);
    favorites = new ArrayList<String>(prefs.getStringSet(PREFS_NAME,
            new HashSet<String>()));
    super.onCreate(savedInstanceState);


                        //As you can see i added SharedPreferences to OnCreate
                       //more code..
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub

    prefs = getSharedPreferences(prefName, MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putStringSet(PREFS_NAME, new HashSet<String>(favorites));
    editor.commit();
    super.onPause();

}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    prefs = getSharedPreferences(prefName, MODE_PRIVATE);
    favorites = new ArrayList<String>(prefs.getStringSet(PREFS_NAME,
            new HashSet<String>()));

    super.onResume();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);
    outState.putStringArrayList(PREFS_NAME, favorites);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState != null
            && savedInstanceState.containsKey(PREFS_NAME)) {
        favorites = savedInstanceState.getStringArrayList(PREFS_NAME);
    }
}

【问题讨论】:

  • 在这里发布一些来自 onCreate() 方法的代码...
  • 我添加了一些相关代码
  • AnimalonPause 中使用的addfavorite 变量是什么?
  • 'addfavorite.getFavorites()' 允许我访问我在 'Favorites' 类中创建的主要收藏夹数组列表

标签: android android-listview arraylist sharedpreferences


【解决方案1】:

我认为,当您使用addfavorite.getFavorites() 时,此方法返回空列表。而当你进入Favorites 类时,Animals 类中的onPause() 方法会被调用并重写你的偏好。

【讨论】:

  • 关于如何修复它的任何想法?
  • 我认为类似:当您尝试保存收藏夹时 - 首先从偏好中获取旧收藏夹,添加新收藏夹然后保存。或者在 getFavorites() 方法中,如果 arraylist 未初始化并返回它们,则获取共享首选项。
猜你喜欢
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
相关资源
最近更新 更多