在我的应用程序中,我正在尝试保存字符串的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();
}
答案 0 :(得分:0)
如果onCreate永远不会被调用,那么你的活动永远不会开始,所以
中的“this”prefs = PreferenceManager.getDefaultSharedPreferences(this);
不是指正确初始化的活动。
您应该开始包含“添加”方法的活动(自动调用onCreate方法),或者您可以将对当前活动的Activity的引用传递给add方法,例如:
public void add(String v, String k, Activity a){
prefs = PreferenceManager.getDefaultSharedPreferences(a);
但是,将方法从一个活动直接调用到另一个活动并不是一种好的编程风格。 最好是创建一个单独的类,其中包含两个活动共有的代码。