我有一个大脑冻结,因为这个明显的功能并不适合我,任何帮助都会受到赞赏。这是我的工作:
这两个活动似乎都有自己的SharedPreferences个人实例。有没有更好的解决方案来共享活动中的变量,我在这做错了什么?
谢谢
//
// Activity A
//
SharedPreferences prefToDos = this.getApplicationContext().getSharedPreferences("MyPref_ToDos", MODE_PRIVATE);
SharedPreferences.Editor editorToDos = prefToDos.edit();
// Works OK I get 2 items for that activity
JSONArray jArrToDos = new JSONArray(prefToDos.getString("todos",null));
//
// Activity B
//
SharedPreferences prefToDos = this.getApplicationContext().getSharedPreferences("MyPref_ToDos", MODE_PRIVATE);
SharedPreferences.Editor editorToDos = prefToDos.edit();
// Works OK I get 2 items for that activity
JSONArray jArrToDos = new JSONArray(prefToDos.getString("todos",null));
//Yes button clicked
jArrToDos.remove(todoIndex);
editorToDos.putString("todos",jArrToDos.toString());
editorToDos.commit();
finish();
//
// Back to Activity A to onResume()
//
SharedPreferences prefToDos = this.getApplicationContext().getSharedPreferences("MyPref_ToDos", MODE_PRIVATE);
SharedPreferences.Editor editorToDos = prefToDos.edit();
// DOESN'T WORK I still get 2 items for that activity
JSONArray jArrToDos = new JSONArray(prefToDos.getString("todos",null));
答案 0 :(得分:2)
首先尝试使用apply()代替commit()。 您的代码中的其他内容似乎是正确的。
SharedPreferences
的替代方案,您可以
使用onActivityResult (int requestCode, int resultCode, Intent data)
答案 1 :(得分:0)
您的代码似乎没有错。尝试打印执行jArrToDos.remove(todoIndex);
后获得的内容并检查项目是否已从阵列中删除。
要将数据从一个活动传递到另一个活动,您可以使用Intents,这对于本地临时共享更为可取。
示例:
Intent intent = new Intent(getBaseContext(), MyActivity.class);
intent.putExtra(KeyForTheValueToPass, ValueToPass);
startActivity(intent);
答案 2 :(得分:0)
我有另一个解决方案而不是删除sharepreference store“”(空白)要删除哪个字段为空。当你回到下一个活动时,你将无法获得价值,或者你只需在代码中加上一个并验证。为我工作。