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

标签 java android android-activity sharedpreferences

我正在尝试通过共享首选项将一个字符串发送到另一 Activity 。我想回调相同的 Activity 。

我有多个 Activity ,它们调用一个共同的 Activity 。因此,我想确定从哪个 Activity 中调用了公共(public) Activity ,并想返回到调用它的同一 Activity 。

这是我在第一个 Activity 中完成的:

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

在第二个 Activity 中

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

在共同 Activity 中

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

        }
    });
}

现在,当我从第一个 Activity 调用通用 Activity 时,我不会返回到同一个 Activity ,而是正在调用第二个 Activity 。

出了什么问题?

编辑

我尝试了这个:仍然不起作用

    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;
            }

            }

最佳答案

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

第一个 Activity 的注释 -->> SharedPreferences.Editor编辑器= mPrefs.edit();

第二次 Activity 的注释 -->> SharedPreferences mPrefs = getSharedPreferences("Type1", 0);

在您的共同 Activity 中... -->SharedPreferences mPrefs = getSharedPreferences("类型", 0); ActivityType = mPrefs.getString("gosend", "1");

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

您指的是与代码中相同的文件,但实际上,您想要做的是指2个单独的共享首选项...

mPref 和 mPref1....

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

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

在您的 Activity 1 中

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

在您的 Activity 2 中

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

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

在您的共同 Activity 中

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;
        }

    }
}

**祝你好运,希望这有帮助..

关于java - 无法正确访问共享首选项数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34649004/

相关文章:

Android 在使用 Cordova Camera 和 Capture 插件时导致 Cordova 应用程序重启

java - 如何检查是否不存在其他文件

java - Hibernate 4.x 及更高版本中是否有隔离器 (Hibernate 3.6) 的替代品?

android - 如何解决 React Native Expo 项目中的 Uncaught Error :29. 0.0

android - React-Native Webview 无法在 iOS 中正常加载 android 中的 ppt、xls、doc 文件

java - 安卓小端MD5

Android:如何从警报对话框启动 Activity

java - 运行HIVE命令引发错误:线程 “main”中的异常java.lang.RuntimeException:org.apache.hadoop.hive.ql.metadata.HiveException

java - 在 Swing 中显示多个按钮

android - 在 TestCase 中启动第二个 Activity (这不是被测 Activity )