SharedPreferences在活动

时间:2017-02-18 04:55:54

标签: android sharedpreferences

我有一个大脑冻结,因为这个明显的功能并不适合我,任何帮助都会受到赞赏。这是我的工作:

  1. 公开活动A
  2. 阅读该活动的SharedPreferences
  3. 公开活动B
  4. 删除SharedPreferences对象中的两个项目之一
  5. 保存偏好
  6. 返回活动B重新阅读SharedPreferences我仍然看到两个项目
  7. 这两个活动似乎都有自己的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));
    

3 个答案:

答案 0 :(得分:2)

首先尝试使用apply()代替commit()。 您的代码中的其他内容似乎是正确的。

SharedPreferences的替代方案,您可以

  1. 使用startActivityForResult(Intent, int, Bundle)

  2. 启动活动B.
  3. 并通过setResult (int resultCode, Intent data)

  4. 传递字符串
  5. 使用onActivityResult (int requestCode, int resultCode, Intent data)

  6. 从活动A中的intent中检索字符串

答案 1 :(得分:0)

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

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

示例:

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

答案 2 :(得分:0)

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