无法正确访问共享首选项数据

时间:2016-01-07 06:52:53

标签: java android android-activity sharedpreferences

我正在尝试通过共享首选项将一个字符串发送到另一个活动。我想回复同样的活动。

我有多个活动,它们共同调用一个活动。所以我想确定已经调用了哪个公共活动,并想要回到调用它的同一个活动。

这是我在第1次活动中所做的:

    SharedPreferences mPrefs = getSharedPreferences("Type", 0);
    SharedPreferences.Editor editor = mPrefs.edit();
    editor.putString("gosend","1");
    editor.commit();

第二次活动

SharedPreferences mPrefs = getSharedPreferences("Type1", 0);
    SharedPreferences.Editor editor = mPrefs.edit();
    editor.putString("goride", "2");
    editor.commit();

共同活动

  useLocation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            SharedPreferences mPrefs = getSharedPreferences("Type", 0);
            activityType = mPrefs.getString("gosend", "1");

            SharedPreferences mPrefs1 = getSharedPreferences("Type1",0);
            goride = mPrefs1.getString("goride","2");

            if(activityType.equals("1")) {

                intent = new Intent(ChooseFromMapActivity.this, GoSend.class);

                startActivity(intent);
            }

            if(goride.equals("2"))
            {
                intent = new Intent(ChooseFromMapActivity.this, GoRideActivity.class);

                startActivity(intent);
            }

        }
    });
}

现在,当我从第一个活动中调用常见活动时,我没有回到相同的第二个活动被调用。

什么出错?

编辑

我试过这个:仍然无法正常工作

    useLocation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            SharedPreferences mPrefs = getSharedPreferences("Type", 0);
            activityType = mPrefs.getString("gosend", "0");

         //   SharedPreferences mPrefs1 = getSharedPreferences("Type1",0);
          //  goride = mPrefs1.getString("goride","0");

            switch (activityType){

                case "0":
                intent = new Intent(ChooseFromMapActivity.this, GoSend.class);

                startActivity(intent);
                    break;
                case "1":

                intent = new Intent(ChooseFromMapActivity.this, GoRideActivity.class);

                startActivity(intent);
                    break;
            }

            }

2 个答案:

答案 0 :(得分:0)

在您的常见活动中尝试以下代码:

useLocation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            SharedPreferences mPrefs = getSharedPreferences("Type", 0);
            activityType = mPrefs.getString("gosend", "0");

            SharedPreferences mPrefs1 = getSharedPreferences("Type1",0);
            goride = mPrefs1.getString("goride","0");

            if(activityType.equals("1")) {

                intent = new Intent(ChooseFromMapActivity.this, GoSend.class);

                startActivity(intent);
            }

            else if(goride.equals("2"))
            {
                intent = new Intent(ChooseFromMapActivity.this, GoRideActivity.class);

                startActivity(intent);
            }

        }
    });
}

让我知道你的问题已经解决了。您的默认值与所需的值匹配,因此每次first if语句都将变为true。

希望这有帮助。

答案 1 :(得分:0)

在编写两个文件时,您正在调用相同的共享首选项

第一项活动的注意事项 - >> SharedPreferences.Editor editor = mPrefs.edit();

第二项活动的说明 - >> SharedPreferences mPrefs = getSharedPreferences(“Type1”,0);

并在您的共同活动中...... - > SharedPreferences mPrefs = getSharedPreferences(“Type”,0);             activityType = mPrefs.getString(“gosend”,“1”);

        SharedPreferences mPrefs1 = getSharedPreferences("Type1",0);
        goride = mPrefs1.getString("goride","2");

您指的是与您的代码中相同的文件,但实际上,您尝试做的是引用2个单独的共享偏好...

mPref& mPref1 ....

所以,你必须决定使用其中一个,而不是两个......

编辑--->>更新代码建议。

您的活动1 中的

SharedPreferences mPrefs = getSharedPreferences("Type", 0);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("gosend","1");
editor.commit();
您的活动2

中的

SharedPreferences mPrefs = getSharedPreferences("Type1", 0);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("gosend", "2");
editor.commit();

==>>确保“gosend”值是您想要的值。您正在对“gosend”所做的更改进行测量,因为在您的代码中,您希望测试“gosend”值,并根据值打开不同的活动。

您的共同活动中的

useLocation.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        SharedPreferences mPrefs = getSharedPreferences("Type", 0);
        activityType = mPrefs.getString("gosend", "0");

     //   SharedPreferences mPrefs1 = getSharedPreferences("Type1",0);
      //  goride = mPrefs1.getString("goride","0");

        switch (activityType){

            case "0":
                intent = new Intent(ChooseFromMapActivity.this, GoSend.class);
                startActivity(intent);
                break;
            case "1":
                intent = new Intent(ChooseFromMapActivity.this, GoRideActivity.class);
                startActivity(intent);
                break;
        }

    }
}

**祝你好运,希望对此有所帮助..