Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在多个活动中使用共享首选项?_Java_Android - Fatal编程技术网

Java 如何在多个活动中使用共享首选项?

Java 如何在多个活动中使用共享首选项?,java,android,Java,Android,我正在学习如何使用共享首选项,并且我了解如何通过一个类设置和获取它。但是,我希望在两个类中使用共享的首选项。让我解释一下 因此,在下面的课程中,我基本上得到了每当单击笑话、诗歌或有趣故事按钮时的总点击次数。此代码如下(称为MainActivity): 然而,我有另一个叫做“Content”的类,基本上它包含一个叫做“selectanother”的按钮。我希望这也包括在点击次数中 这就是目标,无论我在哪一页,它都应该记录按钮、笑话、诗歌、有趣故事的点击次数,然后选择另一个。如何实现这一点 以下是内

我正在学习如何使用共享首选项,并且我了解如何通过一个类设置和获取它。但是,我希望在两个类中使用共享的首选项。让我解释一下

因此,在下面的课程中,我基本上得到了每当单击笑话、诗歌或有趣故事按钮时的总点击次数。此代码如下(称为MainActivity):

然而,我有另一个叫做“Content”的类,基本上它包含一个叫做“selectanother”的按钮。我希望这也包括在点击次数中

这就是目标,无论我在哪一页,它都应该记录按钮、笑话、诗歌、有趣故事的点击次数,然后选择另一个。如何实现这一点

以下是内容的代码:

public class Content extends AppCompatActivity{

    Button selectAnotherButton;
    TextView contentText;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_content);

             selectAnotherButton = findViewById(R.id.button_select_another);


            selectAnotherButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        setContent();
                    }
            });

    }

您可以使用单例模式实现对SharedReferences的全局访问。大概是这样的:

    public class SharedPreferencesManager {

    private static final String APP_PREFS = "AppPrefsFile";
    private static final String KEY_FOR_SOMETHING = "KEY_FOR_SOMETHING";

    private SharedPreferences sharedPrefs;
    private static SharedPreferencesManager instance;



    private SharedPreferencesManager(Context context) {
        sharedPrefs =
                context.getApplicationContext().getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
    }


    public static synchronized SharedPreferencesManager getInstance(Context context){
        if(instance == null)
            instance = new SharedPreferencesManager(context);

        return instance;
    }

    public void setSomething(String something) {
        SharedPreferences.Editor editor = sharedPrefs.edit();
        editor.putString(KEY_FOR_SOMETHING, something);
        editor.apply();
    }

    public String getSomeKey() {
        String someValue = sharedPrefs.getString(KEY_FOR_SOMETHING, null);
        return someValue;
    }
}
您可以使用任意多的方法来获取和设置SharedReferences的各种值,并且可以通过整个应用程序访问它,只需执行以下操作:

SharedPreferencesManager.getInstance(context).getSomeKey();

您可以使用单例模式实现对SharedReferences的全局访问。大概是这样的:

    public class SharedPreferencesManager {

    private static final String APP_PREFS = "AppPrefsFile";
    private static final String KEY_FOR_SOMETHING = "KEY_FOR_SOMETHING";

    private SharedPreferences sharedPrefs;
    private static SharedPreferencesManager instance;



    private SharedPreferencesManager(Context context) {
        sharedPrefs =
                context.getApplicationContext().getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
    }


    public static synchronized SharedPreferencesManager getInstance(Context context){
        if(instance == null)
            instance = new SharedPreferencesManager(context);

        return instance;
    }

    public void setSomething(String something) {
        SharedPreferences.Editor editor = sharedPrefs.edit();
        editor.putString(KEY_FOR_SOMETHING, something);
        editor.apply();
    }

    public String getSomeKey() {
        String someValue = sharedPrefs.getString(KEY_FOR_SOMETHING, null);
        return someValue;
    }
}
您可以使用任意多的方法来获取和设置SharedReferences的各种值,并且可以通过整个应用程序访问它,只需执行以下操作:

SharedPreferencesManager.getInstance(context).getSomeKey();

共享首选项只是一个包含一组键值对的公共文件。它可以在应用程序的任何类中访问

对于您的情况,您可以将其作为键值对存储在一个类中。 然后在另一个类中使用相同的键名检索它。如果流是连续的,它应该检索存储在另一个类中的值

有关更多信息,请参阅以下现有stackoverflow答案:

官方文件:

教程示例:

共享首选项只是一个包含一组键值对的公共文件。它可以在应用程序的任何类中访问

对于您的情况,您可以将其作为键值对存储在一个类中。 然后在另一个类中使用相同的键名检索它。如果流是连续的,它应该检索存储在另一个类中的值

有关更多信息,请参阅以下现有stackoverflow答案:

官方文件:

教程示例:

如果使用Dagger(或任何其他依赖项注入器),则可以注入SharedReferences助手类

如果没有,您可以创建Rado描述的单例实例

此外,您还可以查看共享首选项实用程序,如或

,如果您使用的是Dagger(或任何其他依赖项注入器),则可以注入SharedReferences助手类

如果没有,您可以创建Rado描述的单例实例


此外,您还可以查看共享首选项实用程序,例如或

,可能只是有一个更新(提交)的方法,还有一个方法可以从pref编辑器中获取值!让它们在任何类中使用类的对象都会很好,并且私有pref和editor在场景背后本质上是全局的(静态的),可能只是有一个更新(提交)的方法,还有一个方法可以从pref编辑器中获取值!让它们在任何类中使用类的对象都可以,私有pref和编辑器是全局的(静态的)在《场景背后的本质》中,您可以向我展示它是如何在MAinActivity和COntent类中实现的,因为我已经包括了您的类,唯一让我感到困惑的是MAinActivity和COntent类中的点击计数Content@mmkp嗯,如果我没弄错的话,您可以保存MainActivity的点击次数,如
SharedReferencesManager.getInstance(上下文)。saveNumberOfClicks(numberofClick)。现在在另一个屏幕中,当需要点击次数时,只需调用
SharedReferencesManager.getInstance(context).getNumberOfClicks()
,就可以了。当然,您需要实现这些方法,就像我在回答中向您展示的那样。如果这个答案有帮助,请将其标记为正确答案:)你能告诉我它是如何在MAinActivity和COntent类中实现的吗?因为我已经包括了你的类,唯一让我感到困惑的是MAinActivity和COntent类中的点击数Content@mmkp嗯,如果我没弄错的话,您可以保存MainActivity的点击次数,如
SharedReferencesManager.getInstance(上下文)。saveNumberOfClicks(numberofClick)。现在在另一个屏幕中,当需要点击次数时,只需调用
SharedReferencesManager.getInstance(context).getNumberOfClicks()
,就可以了。当然,您需要实现这些方法,就像我在回答中向您展示的那样。如果此答案有帮助,请将其标记为正确答案:)