Удаление объекта из SharedPreferences в android

Я пытаюсь, когда нажимаю избранную кнопку, сохраняя объект в SharedPreferences. Я сделал это, но когда я снова нажимаю избранную кнопку, чтобы удалить объект в SharedPreferences, я не могу этого сделать, у меня есть старые объекты без удаленных объектов. Объекты, которыми я поделился ниже, использовал код для этого процесса. Как я могу это сделать?

Сохранение и удаление в избранный объект

        String tag = holder.order.getTag().toString();
        if (tag.equalsIgnoreCase("deactive")) {
            //order_models.add(new RetroPhoto(1,dataList.get(position).getSurname(),dataList.get(position).getName()));
            sharedPreference.addFavorite(context, dataList.get(position));
            //dataList.get(position).getName();
            holder.order.setTag("active");
            holder.order.setImageResource(R.drawable.ic_favorite);
        } else {

            sharedPreference.removeFavorite(context, dataList.get(position));
            //dataList.get(position).getName();
            //dataList.remove(dataList.get(position));
            holder.order.setTag("deactive");
            holder.order.setImageResource(R.drawable.ic_favorite_outline);
        }



public class SharedPreference {

    public static final String PREFS_NAME = "NKDROID_APP";
    public static final String FAVORITES = "Favorite";

    public SharedPreference() {
        super();
    }


    public void storeFavorites(Context context, List<RetroPhoto> favorites){
        SharedPreferences settings;
        SharedPreferences.Editor editor;

        settings = context.getSharedPreferences(PREFS_NAME,
            Context.MODE_PRIVATE);
        editor = settings.edit();

        Gson gson = new Gson();
        String jsonFavorites = gson.toJson(favorites);

        editor.putString(FAVORITES, jsonFavorites);

        editor.commit();
    }

    public ArrayList<RetroPhoto> loadFavorites(Context context) {
        SharedPreferences settings;
        List<RetroPhoto> favorites;

        settings = 
        context.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
        if (settings.contains(FAVORITES)) {
            String jsonFavorites = settings.getString(FAVORITES, null);
            Gson gson = new Gson();
            RetroPhoto[] favoriteItems = 
            gson.fromJson(jsonFavorites,RetroPhoto[].class);
            favorites = Arrays.asList(favoriteItems);
            favorites = new ArrayList<RetroPhoto>(favorites);
        } else
            return null;

        return (ArrayList<RetroPhoto>) favorites;
    }


    public void addFavorite(Context context, RetroPhoto beanSampleList) {
        List<RetroPhoto> favorites = loadFavorites(context);
        if (favorites == null){
            favorites = new ArrayList<RetroPhoto>();
        }
        favorites.add(beanSampleList);
        storeFavorites(context, favorites);
    }

    public void removeFavorite(Context context, RetroPhoto beanSampleList) {
        ArrayList<RetroPhoto> favorites = loadFavorites(context);
        if (favorites != null) {
            favorites.remove(beanSampleList);
            storeFavorites(context, favorites);
        }
    }
}

Получение обновления LoadSharedPreferences

@Override
protected void onResume() {
    super.onResume();

    Log.e("onResume", "onResume Called");
    if (order_models != null ) {
        try {order_models = sharedPreference.loadFavorites(getApplicationContext());
            order_adapter = new OrderAdapter(getApplicationContext(), order_models);
            recycle.setAdapter(order_adapter);
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
       order_adapter.notifyDataSetChanged();
    }
}

Я попробовал ваш ответ, но не могу загрузить объекты

Diego 07.09.2018 13:44

Что ты имеешь в виду?

TheWanderer 07.09.2018 13:44

Когда я использую избранное.addAll (prefsHelper.loadFavorites (this)); для загрузки объектов, он не загружает Objcest из сохраненного метода

Diego 07.09.2018 13:47

У вас действительно есть что-нибудь спасенное?

TheWanderer 07.09.2018 13:47
0
5
423
1

Ответы 1

на самом деле вы просто добавляете элемент в SharedPreference и удаляете элемент только из своего массива. для удаления элемента из SharedPreference вы должны использовать этот код

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.edit().remove("key").apply();

Другие вопросы по теме