重新打开应用程序后,Android SharedPreferences未保存

时间:2016-04-15 20:22:07

标签: android

我正在尝试添加一个名为removeCard的函数,此函数接收一个字符串数组。此数组长度为48,此数组中的字符串包含卡的名称,即 prince knight 。如果此数组中的Stringnull,则表示没有更多的卡要删除(游戏包含48张卡,但我想删除其中只有2张)。

我的所有卡片都使用密钥SharedPreferences保存在key1中。这个函数应该从键中删除阵列中的所有卡(如果有人不小心添加了王子但他还没有解锁它)。

但是,这个函数工作正常,当我返回main3.class意图时,它显示数组中的卡已从SharedPreferences键中删除,但当我关闭应用程序并重新打开它时,他们仍然像从未被删除过一样。

这是我的代码:

public static void removeCard(String[] s) {
    Set<String> used;
    used = prefs.getStringSet("key1", null);

    for (String card : s) {
        if (card != null)
            used.remove(card);
        else 
            break;
    }

    editor.putStringSet("key1", used);
    editor.commit();
    Intent k = new Intent(cont, main3.class);
    cont.startActivity(k);
}

此外,当您点击array项目(每个项目是一张卡片)时,ListView包含要删除的卡片。 result[position]是卡片名称,cards包含要移除的值array

@Override
public void onClick(View v) {
    if (position == 0) { // back button pressed
        main2.removeCard(cards);                    
        main2.cont.finish(); // close main2 activity
    } else {
        Toast.makeText(context, result[position] + " Picked", Toast.LENGTH_LONG).show(); // Toast the card you picked
        if (!Arrays.asList(cards).contains(result[position])) { // if card is not already in array, add it.
            cards[count] = result[position];
            count++;
        }
    }
}

这就是我获取SharedPreferences编辑器的方式。

public static SharedPreferences prefs;
public static SharedPreferences.Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    cont = this;
    listView = (ListView) findViewById(R.id.list);
    listView.setAdapter(new CustomAdapter(main2.this, mDrawableName, mDrawableImg, n));
    prefs = getSharedPreferences("MyPrefs", 0);
    editor = prefs.edit();
}

另外,要显示我使用的其他活动中的卡片:

SharedPreferences pref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
Set<String> cards = pref.getStringSet("key1", null);
tv1.setText("Available cards: " + cards);

0 个答案:

没有答案