Android 共享引用不';不能在活动之间工作

Android 共享引用不';不能在活动之间工作,android,sharedpreferences,Android,Sharedpreferences,我有一个大脑冻结,因为这一明显的特点不见工作,我和任何帮助将不胜感激。以下是我的工作: 公开活动A 阅读该活动的SharedReferences 公开活动B 删除SharedReferences对象中的两项之一 保存首选项 返回活动B重新阅读SharedReferences我仍然看到两项 这两种活动似乎都有自己的共享引用实例。有没有更好的方法在活动间共享变量?我做错了什么 多谢各位 // // Activity A // SharedPreferences prefToDos = thi

我有一个大脑冻结,因为这一明显的特点不见工作,我和任何帮助将不胜感激。以下是我的工作:

  • 公开活动A
  • 阅读该活动的SharedReferences
  • 公开活动B
  • 删除SharedReferences对象中的两项之一
  • 保存首选项
  • 返回活动B重新阅读SharedReferences我仍然看到两项
  • 这两种活动似乎都有自己的共享引用实例。有没有更好的方法在活动间共享变量?我做错了什么

    多谢各位

        //
    // 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));
    

    您的代码似乎没有问题。尝试打印执行
    jArrToDos.remove(todoIndex)后得到的内容
    并检查该项是否已从阵列中移除

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

    例如:

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

    您的代码似乎没有问题。尝试打印执行
    jArrToDos.remove(todoIndex)后得到的内容
    并检查该项是否已从阵列中移除

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

    例如:

    Intent intent = new Intent(getBaseContext(), MyActivity.class);
    intent.putExtra(KeyForTheValueToPass, ValueToPass);
    startActivity(intent);
    
    首先,尝试使用而不是。 代码中的其他内容似乎是正确的

    除了
    SharedReferences
    ,您还可以

  • 使用启动活动B

  • 并通过意图传递字符串

  • 使用从活动A中的意图检索字符串

  • 首先,尝试使用而不是。 代码中的其他内容似乎是正确的

    除了
    SharedReferences
    ,您还可以

  • 使用启动活动B

  • 并通过意图传递字符串

  • 使用从活动A中的意图检索字符串


  • 我有另一个解决方案,而不是删除sharepreference store“”(空白),您希望将哪个字段删除为空白。当您返回下一个活动时,您将无法获得值或将获得“”,只需在代码中输入一个if-else并进行验证。这对我有效。

    我有另一个解决方案,而不是删除sharepreference store“”(空白),您要删除空白的字段。当您返回下一个活动时,您将无法获得值或将获得“”,只需在代码中添加一个if-else并进行验证。这对我有效。

    jArrToDos.remove(todoIndex);editorToDos.putString(“todos”,jArrToDos.toString());删除后,您在jArrToDos中得到了什么?@Radek首先检查您的SharedReference是否更新,然后检查您的onResume方法在ActivityA中是否正常工作。尝试调试此日志或打印日志。查看此我希望这将对您有所帮助如果您的两个活动都在同一进程上运行这通常是当您的活动具有不同的进程时不完全正确,但删除不会传播到另一个活动,就好像我正在处理两个不同的实例一样,如前所述的不同流程,但不确定如何调试,感谢您提供ideasjArrToDos.remove(todoIndex);editorToDos.putString(“todos”,jArrToDos.toString());删除后,您在jArrToDos中得到了什么?@Radek首先检查您的SharedReference是否更新,然后检查您的onResume方法在ActivityA中是否正常工作。尝试调试此日志或打印日志。查看此我希望这将对您有所帮助如果您的两个活动都在同一进程上运行这通常是当您的活动具有不同的进程时不完全正确,但删除不会传播到另一个活动,就好像我正在处理两个不同的实例一样,如前所述的不同流程,但不确定如何调试,感谢您的支持ideas@Radek需要返回活动A,然后使用他的SharedReference值。那么他如何将意图传递到Backpress?@ZakiPathan他可以覆盖活动B中的onBackPress()。@Radek需要返回活动A,然后使用他的SharedReference值。那么他是如何将意图传递给onBackPress的呢?@ZakiPathan他可以覆盖活动B中的onBackPressed()。