Удалить ArrayList из SharedPreferences - PullRequest
0 голосов
/ 16 декабря 2018

Я знаю, что есть несколько примеров этого, но я попробовал многие из них, и я не смог исправить свою проблему. Я хочу удалить ArrayList из моих общих настроек.

Я создаю свой ArrayList на общих настройкахв first активность:

 public void saveArrayList(ArrayList<String> list){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(list);
    editor.putString("testShared", json);
    editor.apply();     // This line is IMPORTANT !!!
}

На моей second активности я получаю свой массив следующим образом:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_food_basket);

    alreadyAddedFoodtest = (ListView) findViewById(R.id.alreadyAddedList);
    registerForContextMenu(alreadyAddedFoodtest);

    getArrayList();


}
 public ArrayList<String> getArrayList(){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(AddFoodBasket.this);
    Gson gson = new Gson();
    String json = prefs.getString("testShared", null);
    Type type = new TypeToken<ArrayList<String>>() {}.getType();
    itemsAdded=gson.fromJson(json, type);
    return itemsAdded;
}

И, наконец, я удаляюэлементы массивов в моей секунде активности здесь:

 public boolean onContextItemSelected(MenuItem item){
    if(item.getItemId()==R.id.delete){

        AddFood add=new AddFood();

        count--;
        countTextbasket(count);
        Toast.makeText(getApplicationContext(),"Διαγράφηκε"+item,Toast.LENGTH_LONG).show();
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); // init the info the position from
        itemsAdded.remove(info.position); // remove the item from the list
        addedAdapter.notifyDataSetChanged();//updating the adapter

        SharedPreferences preferences = getSharedPreferences("testShared", MODE_PRIVATE);
        preferences.edit().clear().apply();

    }else{
        return false;
    }
    return true;
}

Проблема в том, что

SharedPreferences preferencesgetSharedPreferences("testShared", MODE_PRIVATE); preferences.edit().clear().apply();

Не работает, когда яснова откройте мою деятельность, список снова там.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Когда вы очищаете префы, вы делаете это:

SharedPreferences preferences = getSharedPreferences("testShared", MODE_PRIVATE);

Это означает, что вы хотите, чтобы конкретное предпочтение было установлено с этим именем.Ваши другие предпочтения не названы, поэтому они будут другим набором.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(AddFoodBasket.this);

Используйте тот же самый способ, чтобы получить настройки, а затем установить ключ, который вы хотите обнулить, или, если вы хотите удалить все настройки, вы можете clear() их.

0 голосов
/ 16 декабря 2018

getSharedPreferences() не делает то, что вы думаете, что делает.Строка, которую вы передаете ей, является именем этого набора SharedPreferences, и все, что хранится в этом экземпляре, будет в его собственном файле.

Например, использование

getSharedPreferences("hello", ...).edit().putString("test", "something").apply();

создаст целоеновый файл в каталоге данных вашего приложения (preferences_hello.xml), где хранится ключ / значение test/something.

getSharedPreferences() не получает конкретного предпочтения, он получает определенный набор предпочтений.getDefaultSharedPreferences() фактически вызывает getSharedPreferences() внутри и передает имя пакета вашего приложения.

В настоящее время вы сохраняете testShared в стандартных SharedPreferences (getDefaultSharedPreferences()).Если вы хотите очистить это значение, используйте

PreferenceManager.getDefaultSharedPreferences(context).edit().remove("testShared").apply();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...