2017-02-18 84 views
0

我有一个大脑冻结,因为那个明显的功能没有看到为我工作,任何帮助,将不胜感激。这是我做的:SharedPreferences在活动之间不起作用

  1. 开放活动一
  2. 读取SharedPreferences该活动
  3. 开放活动B
  4. 删除这两个项目在SharedPreferences对象
  5. 保存喜好的一个
  6. 围棋回到活动B重读SharedPreferences我仍然看到两项

这两个活动似乎都有自己的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

jArrToDos.remove(todoIndex); editorToDos.putString(“todos”,jArrToDos.toString());删除后你在jArrToDos中得到了什么? –

+0

@Radek首先检查您的sharedpreference是否更新,然后检查您的onResume方法在ActivityA中正常工作。尝试调试这个或打印日志。 –

+0

看到这个[点击我的sharedpreference](http:// stackoverflow。com/a/42268095/7399521)我希望这会对你有帮助 –

回答

0

似乎没有什么是你的代码错误。尝试打印执行jArrToDos.remove(todoIndex);后得到的内容,并检查该项目是否已从阵列中删除。

要将数据从一个活动传递到其他活动,您可以使用Intents,这对于本地临时共享更可取。

例子:

Intent intent = new Intent(getBaseContext(), MyActivity.class); 
intent.putExtra(KeyForTheValueToPass, ValueToPass); 
startActivity(intent); 
+0

@Radek需要回来的活动A,然后使用他的sharedpreference值。那么他如何将意图传递给BackPress? –

+0

@ZakiPathan他可以重写ActivityB中的onBackPressed()。 –

0

我有另一种解决方案,而不是删除sharepreference store“”(空白)你想删除空白的字段。当你回到下一个活动时,你将无法获得价值,或者你会得到“”只要在你的代码中加入一个,并验证它为我工作。