共享首选项不能正确保存数据

时间:2013-03-28 20:55:08

标签: android android-intent

您好我的应用程序中有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);

1 个答案:

答案 0 :(得分:1)

您的共享首选项文件(名称)总是一样吗?

如果您使用来自不同活动/服务/意图/ ...的共享偏好设置,则应使用模式 MODE_MULTI_PROCESS (常量值int = 4)。如果没有,文件被锁定,只有一个进程可以立即写入它!

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

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

MODE_MULTI_PROCESS在所有版本上都是ON,直到android 2.3,但后者必须严格调用!官方文件说:

  

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