【问题标题】:Android - How to clear sharepreference by position recyclerviewAndroid - 如何通过位置 recyclerview 清除共享首选项
【发布时间】:2017-08-17 19:14:22
【问题描述】:

这是我获得共享偏好的代码

 private void getAllSharePreference() {

     SharedPreferences sharedPreferences = getContext().getSharedPreferences(SharePreferenceKey.SONG_LIST, Context.MODE_PRIVATE);

     getSongJson = sharedPreferences.getString(SharePreferenceKey.SONG_LIST, "N/A");

     if (!getSongJson.equals("N/A")) {
         Type type = new TypeToken<List<SongRespones.Songs>>() {}.getType();
         songSharePreference = new Gson().fromJson(getSongJson, type);

         adapter.addMoreItem(songSharePreference);
         rvFavorite.setAdapter(adapter);
    }
}

这是我想按位置 recyclerview 清除共享偏好列表的代码。

@Override
public void onClickView(final int position, View view) {

    final PopupMenu popupMenu = new PopupMenu(getContext(), view);
    popupMenu.inflate(R.menu.remove_favorite);
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.popup_remove_favorite:
                    songSharePreference.remove(position);
                    adapter.notifyItemChanged(position);
                    break;
            }
            return false;
        }

    });
    popupMenu.show();
}

但我无法清除共享偏好。 请帮帮我:

【问题讨论】:

  • 您是要清除共享首选项还是要从数据集中删除某个位置的项目?你的问题不清楚
  • 我想清除两者。
  • 清除共享偏好后,我的数据集也清除了。那该怎么办?
  • 但是你在哪里这样做呢?我只看到 - songSharePreference.remove(position) 请发布您的代码以及您为实现此目标所做的尝试以及您遇到的错误是什么!
  • 不知道怎么清除,贴出来问问大家。

标签: android android-sharedpreferences


【解决方案1】:

如果您想清除 SharedPreferences 中的所有数据,这是清除此“SharePreferenceKey.SONG_LIST”所有数据的方法。

@Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.popup_remove_favorite:
                songSharePreference.remove(position);
                adapter.notifyItemChanged(position);
                SharedPreferences sharedPreferences = 
                getContext().getSharedPreferences( 
                SharePreferenceKey.SONG_LIST, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                constants.editor.clear();
                constants.editor.commit();
                break;
        }
        return false;
    }

我建议你使用文件来保存和检索对象。它易于使用和处理。

    private void saveDataToFile() {

    FileOutputStream fileOutputStream = null;
    try {
        fileOutputStream = getContext().openFileOutput("fileName", Context.MODE_PRIVATE);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (NullPointerException e) {

    }
    ObjectOutputStream objectOutputStream = null;
    try {
        objectOutputStream = new ObjectOutputStream(fileOutputStream);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (NullPointerException e) {

    }
    try {
        if (objectOutputStream != null) {
            objectOutputStream.writeObject(yourObject); //which data u want to save
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        if (objectOutputStream != null) {
            objectOutputStream.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

从文件中检索数据

    private void getDataFromFile() {

    FileInputStream fileInputStream = null;
    try {
        fileInputStream = getContext().openFileInput("fileName");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        return;
    }
    ObjectInputStream objectInputStream = null;
    try {
        objectInputStream = new ObjectInputStream(fileInputStream);
    } catch (IOException |NullPointerException e) {
        e.printStackTrace();
    }
    try {
        yourObject = (ObjectClass) objectInputStream.readObject(); //if arraylist then cast to arrylist ( (ArrayList<ObjectClass>) objectInputStream.readObject();)
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    try {
        objectInputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多