Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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/233.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 如何将SharedReference带入同一活动的新功能中?(安卓工作室)_Java_Android - Fatal编程技术网

Java 如何将SharedReference带入同一活动的新功能中?(安卓工作室)

Java 如何将SharedReference带入同一活动的新功能中?(安卓工作室),java,android,Java,Android,我正在使用SharedReferences为一个活动创建设置,该设置将应用于其他活动。我已经在OnCreate中创建了SharedReferences,但是我需要在按下按钮时调用的第二个函数中设置它们。目前,如果我把SharedReferences放在除OnCreate之外的任何地方,应用程序在启动时就会不断崩溃 问题是我似乎无法将SharedReferences携带到openNextPage函数中,因为openNextPage中提到它时都会出现一个错误,即: 无法解析符号SharedRefer

我正在使用SharedReferences为一个活动创建设置,该设置将应用于其他活动。我已经在OnCreate中创建了SharedReferences,但是我需要在按下按钮时调用的第二个函数中设置它们。目前,如果我把SharedReferences放在除OnCreate之外的任何地方,应用程序在启动时就会不断崩溃

问题是我似乎无法将SharedReferences携带到openNextPage函数中,因为openNextPage中提到它时都会出现一个错误,即:

无法解析符号SharedReference

那么,我如何将编辑器带到这个函数中呢

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

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

    Button nextBtn = findViewById(R.id.confSetBtn);
    nextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openNextPage();
        }
    });
}

public void openNextPage(){
    SharedPreferences.Editor editor = sharedPreferences.edit();

    if(checkBox1.isChecked()){
        editor.putBoolean("value1", true);
    }
    if(checkBox2.isChecked()){
        editor.putBoolean("value2", true);
    }
    editor.apply();

    boolean none = sharedPreferences.getBoolean("value1", false);

    if(none){
        finish();
    }
    else{
        Intent intent = new Intent(welcomeScreen.this, newSettingsActivity.class);
        startActivity(intent);
    }
}

你可以这样试试,我已经编辑了你的代码。我已经在你的类中将此声明为属性

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

            sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

            Button nextBtn = findViewById(R.id.confSetBtn);
            nextBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    openNextPage();
                }
            });
    }

    public void openNextPage(){
            SharedPreferences.Editor editor = sharedPreferences.edit();

            if(checkBox1.isChecked()){
                editor.putBoolean("value1", true);
            }
            if(checkBox2.isChecked()){
                editor.putBoolean("value2", true);
            }
            editor.apply();

            boolean none = sharedPreferences.getBoolean("value1", false);

            if(none){
                finish();
            }
            else{
                Intent intent = new Intent(welcomeScreen.this, newSettingsActivity.class);
                startActivity(intent);
            }
        }

要跨应用程序访问变量,请将其声明为:

public static SharedPreferences object;
通过此链接了解如何在应用程序中使用共享首选项。


干杯

将SharedReferences的实例作为参数传递,如下所示

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

    // update 1
    final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    Button nextBtn = findViewById(R.id.confSetBtn);
    nextBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // update 2
            openNextPage(sharedPreferences);  
        }
    });
}

// update 3
public void openNextPage(SharedPreferences sharedPreferences){  
    SharedPreferences.Editor editor = sharedPreferences.edit();

    if(checkBox1.isChecked()){
        editor.putBoolean("value1", true);
    }
    if(checkBox2.isChecked()){
        editor.putBoolean("value2", true);
    }
    editor.apply();

    boolean none = sharedPreferences.getBoolean("value1", false);

    if(none){
        finish();
    }
    else{
        Intent intent = new Intent(welcomeScreen.this, newSettingsActivity.class);
        startActivity(intent);
    }
}

我认为您可以将SharedPreferences声明为这个字段class@HumzaMalik我该怎么做?对android研究来说还是个新手你需要先学习java。。。您可以将此变量声明为字段,并在onCreate方法中初始化。。。。。。。。。。如果你想在另一个方法中使用,你也可以将SharedReferences作为引用传递给该方法。这解决了值没有传递给openNextPage的问题,但应用程序在启动时仍会崩溃。知道为什么吗?@Sam这可能是你的应用程序代码中的错误。。。回顾一下你到底想做什么,然后付诸实施