0

您好,我的应用程序中有 3 个活动,我使用 Intent 在它们之间传输数据。我遇到的问题是,当我从 3 活动返回到主要活动时,我在主要活动上的共享首选项发生了变化。我怀疑问题在于我的意图是重新启动,但我不确定。我试图让数据保持与我移动到 3 活动时的数据相同。我的应用程序从活动 1 开始,然后进入主要活动,最后如果您单击一个按钮,它会转到第三个活动,获取一些数据并返回到主要活动我遇到的问题是我从第一个活动中获得的数据当我从第三个活动返回时重新启动。当我在活动之间移动数据时,我使用意图。

我传输意图活动1的代码:

        Bundle CIW = new Bundle();
    CIW.putInt("one", int1);
    CIW.putInt("two", int2);
    CIW.putDouble("double", double);
    Intent a = new Intent(Must.this, Main.class);
    a.putExtras(CIW);
    startActivity(a);

我的代码在我的主要活动中获取捆绑包(它在我的创建方法中):

            Intent must = getIntent();
        Intent name = getIntent();
        Bundle CIW = must.getExtras();
        Bundle card = name.getExtras();
        int1 = CIW.getInt("one");
        int2 = CIW.getInt("two");
        double= CIW.getDouble("double");
        int3 = card.getInt("three");

我的共享首选项代码(暂停):

            SharedPreferences settings = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("one", Int1); //the rest of the variable 
editor.commit();

我的共享偏好代码(在简历上):

    SharedPreferences settings = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());
    int1 = settings.getInt("one", int1); //the rest of the variable 

我传输意图活动 3 的代码:

Bundle number = new Bundle();
    number.putInt("three", int3);
    Intent a = new Intent(Card.this, Main.class);
    a.putExtras(number);
4

1 回答 1

1

您的共享首选项文件(名称)总是相同的,对吧?

如果您使用来自不同活动/服务/意图/...的共享首选项,则应将其与模式MODE_MULTI_PROCESS(常量值 int = 4)一起使用。如果没有,文件将被锁定,并且只有一个进程可以一次写入!

因此,当您在多进程应用程序中调用共享首选项时,请执行以下操作:

SharedPreferences preferences = this.getSharedPreferences("myapp",4);

MODE_MULTI_PROCESS 在 android 2.3 之前的所有版本上都为 ON,但必须严格调用后者!官方文档说:

操作模式。使用 0 或 MODE_PRIVATE 进行默认操作,使用 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 来控制权限。如果多个进程正在改变同一个 SharedPreferences 文件,也可以使用位 MODE_MULTI_PROCESS。MODE_MULTI_PROCESS 在针对 Gingerbread (Android 2.3) 及更低版本的应用程序中始终打开,在更高版本中默认关闭。

于 2013-03-28T22:09:53.177 回答