不能在onCreate()中调用的方法中使用SharedPreferences?

时间:2011-05-12 07:36:14

标签: android arraylist sharedpreferences

在我的应用程序中,我正在尝试保存字符串的ArrayList。我有一个活动收藏夹,它有一个add()方法。在另一个Activity中调用此方法以向ArrayList添加内容。我希望每次添加某些内容时,它首先获取我在SharedPreferences中存储的所有值,检查该值是否已经存在,如果不存在,则将其添加到ArrayList。最后,我希望它在SharedPreferences中再次存储所有值。调用活动收藏夹时,它会显示一个包含所有收藏夹的列表(获取数据库中的每个值以及所有这些)。

所以我已经创建了一个方法,但是当一个项添加到ArrayList时从未调用过onCreate(),我似乎无法实例化我的SharedPreferences。是否有人可以给我一些提示让这个工作?

注意:我不想使用SQLite数据库,因为它只适用于我的应用程序中的一个类,并且它将包含非常少的值。

此外,我使用的代码:

public void add(String v, String k){
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    int countvaca = prefs.getInt("vacacount", 0);
    int countkantoor = prefs.getInt("kantoorcount", 0);

    for(int i = 0; i <countvaca; i++){
        vaca.add(prefs.getString("Vaca"+i, null));
    }
    for(int j = 0; j <countkantoor; j++){
        kantoor.add(prefs.getString("Kantoor"+j, null));
    }

    boolean blnFound = vaca.contains(v);
    System.out.println("Does arrayList contain vacature ? " + blnFound);
    if(!blnFound){
        vaca.add(v);
        kantoor.add(k);
    }

    Editor edit = prefs.edit();
    countvaca = vaca.size();
    countkantoor = kantoor.size();
    edit.putInt("Vacaturelijstgrootte", countvaca);
    edit.putInt("Kantoorlijstgrootte", countkantoor);
    for(int a = 0; a<countvaca; a++){
         edit.putString("Vaca"+a, vaca.get(a));
    }
    for(int b = 0; b< countkantoor; b++){
        edit.putString("Kantoor"+b, kantoor.get(b));
    }
    edit.commit();


}

1 个答案:

答案 0 :(得分:0)

如果onCreate永远不会被调用,那么你的活动永远不会开始,所以

中的“this”
prefs = PreferenceManager.getDefaultSharedPreferences(this);

不是指正确初始化的活动。

您应该开始包含“添加”方法的活动(自动调用onCreate方法),或者您可以将对当前活动的Activity的引用传递给add方法,例如:

public void add(String v, String k, Activity a){
     prefs = PreferenceManager.getDefaultSharedPreferences(a);

但是,将方法从一个活动直接调用到另一个活动并不是一种好的编程风格。 最好是创建一个单独的类,其中包含两个活动共有的代码。