Android - 如何从另一个活动获取sharedpreferences?

41

我的应用程序中有一个按钮 (activity1)。当用户点击它时,我希望游戏中没有声音。我认为我应该在按钮的onClick方法中使用activity1中的sharedpreferences来实现这一点:

SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("sound","1");
editor.commit();

声音和游戏在另一个活动(activity2)中开始。我需要在那里读取设置的sharedpreferences,但我不知道该怎么做。

谢谢

编辑

我已经省略了这一行:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Activity1.this);

根据您在Activity2.class中的帮助,我像这样读取偏好设置:

SharedPreferences myPrefs = getSharedPreferences("Activity1", MODE_PRIVATE);  //Activity1.class
String ifsound = myPrefs.getString("sound","");
                    
 if (ifsound.equals("1"))
 {
     Toast.makeText(Activity1.this, "1", Toast.LENGTH_LONG).show();
 }
 else
 {
      Toast.makeText(Activity1.this, "0", Toast.LENGTH_LONG).show();
 }
  1. 在Activity1.class中,我点击按钮将“声音”设置为“1”。
  2. 我单击另一个按钮打开Activity2.class,在Toast消息中始终得到“0”。
11个回答

77

使用以下函数添加共享首选项,以及从所有活动中获取保存的值。

public static void setDefaults(String key, String value, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(key, value);
    editor.apply(); // or editor.commit() in case you want to write data instantly
}

public static String getDefaults(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

我该如何使用这些函数来访问共享首选项的值? - Rain Man
1
PreferenceManager现已被弃用。 - tomysek

19

在 Activity1 中保存偏好设置时,请使用以下代码:

SharedPreferences mPrefs = getSharedPreferences("IDvalue", 0);    
//Give any name for //preference as I have given "IDvalue" and value 0.    
SharedPreferences.Editor editor = mPrefs.edit();    
editor.putString(key, value);     
// give key value as "sound" you mentioned and value what you // to want give as "1" in you mentioned    
editor.commit();

在Activity2中检索共享值时,请使用:

SharedPreferences mPrefs = getSharedPreferences("IDvalue",0);    
String str = mPrefs.getString("sound", "");    
if (str.equals("1")) {    
     // Do what you want    
} else {    
    // Do what you want
}

14

你可以在一个活动中保存它:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = prefs.edit();
editor.putString("NameOfShared", "Value");
editor.commit();

从其他活动中获取:

final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
String value=(mSharedPreference.getString("NameOfShared", "Default_Value"));

2
SharedPreferences myPrefs = getSharedPreferences("filename", MODE_PRIVATE);         
String ipAdrs=myPrefs.getString("key", "");

如果键内没有任何值,它将返回你在值中提供的默认值 ("key", "")


2

非常简单!但请记住,在创建活动时,您必须在其中定义偏好设置名称public static,例如:

public static String Preference = "yourPreferenceName";

然后在另一个活动中像这样调用:

SharedPreferences myPreferences =getSharedPreferences("YourprefereneName",MODE_PRIVATE)

2
创建用于共享首选项的类。"Original Answer"翻译成"最初的回答"。
package android.com.be_uniquenative26_dec_2018.beUniqSmartit.util;

import android.com.be_uniquenative26_dec_2018.R;
import android.content.Context;
import android.content.SharedPreferences;

import java.util.Map;
import java.util.Set;

/**
 * Created by android on 2/2/19.
 */

public class SessionSecuredPreferences implements SharedPreferences {

    private SharedPreferences sharedPref;
    protected Context context;

    public SessionSecuredPreferences(Context context, SharedPreferences delegate) {
        this.sharedPref = delegate;
        this.context = context;
    }

    public SessionSecuredPreferences(Context context) {
        this.sharedPref = context.getSharedPreferences ( StringUtil.getStringForID ( R.string.app_name ), Context.MODE_PRIVATE );
        this.context = context;
    }

    @Override
    public Map <String, ?> getAll() {
        return this.sharedPref.getAll ( );
    }

    public Editor edit() {
        return new Editor ( );
    }

    @Override
    public boolean getBoolean(String key, boolean defValue) {
        return this.sharedPref.getBoolean ( key, defValue );
    }

    @Override
    public float getFloat(String key, float defValue) {
        return this.sharedPref.getFloat ( key, defValue );
    }

    @Override
    public int getInt(String key, int defValue) {
        return this.sharedPref.getInt ( key, defValue );
    }

    @Override
    public long getLong(String key, long defValue) {
        return this.sharedPref.getLong ( key, defValue );
    }

    @Override
    public String getString(String key, String defValue) {
        return this.sharedPref.getString ( key, defValue );
    }

    @Override
    public Set <String> getStringSet(String key, Set <String> defValues) {
        return this.sharedPref.getStringSet ( key, defValues );
    }

    @Override
    public boolean contains(String s) {
        return this.sharedPref.contains ( s );
    }

    @Override
    public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener onSharedPreferenceChangeListener) {
        this.sharedPref.registerOnSharedPreferenceChangeListener ( onSharedPreferenceChangeListener );
    }

    @Override
    public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener onSharedPreferenceChangeListener) {
        this.sharedPref.unregisterOnSharedPreferenceChangeListener ( onSharedPreferenceChangeListener );
    }

    public class Editor implements SharedPreferences.Editor {

        protected SharedPreferences.Editor editor;

        public Editor() {
            this.editor = SessionSecuredPreferences.this.sharedPref.edit ( );
        }

        @Override
        public Editor putBoolean(String key, boolean value) {
            this.editor.putBoolean ( key, value );
            return this;
        }

        @Override
        public Editor putFloat(String key, float value) {
            this.editor.putFloat ( key, value );
            return this;
        }

        @Override
        public Editor putInt(String key, int value) {
            this.editor.putInt ( key, value );
            return this;
        }

        @Override
        public Editor putLong(String key, long value) {
            this.editor.putLong ( key, value );
            return this;
        }

        @Override
        public Editor putString(String key, String value) {
            this.editor.putString ( key, value );
            return this;
        }

        @Override
        public Editor putStringSet(String key, Set <String> values) {
            this.editor.putStringSet ( key, values );
            return this;
        }

        @Override
        public void apply() {
            this.editor.apply ( );
        }

        @Override
        public Editor clear() {
            this.editor.clear ( );
            return this;
        }

        @Override
        public boolean commit() {
            return this.editor.commit ( );
        }

        @Override
        public Editor remove(String s) {
            this.editor.remove ( s );
            return this;
        }

    }

}

"最初的回答" 可以翻译为 "Original Answer"。以下是翻译的结果:

可以使用这个类在任何活动和片段中,并且可以轻松地将数据存储在共享首选项中。


1

首先在MainActivity中创建一个方法以获取Context:

 public  Context getContext(){
        Context mContext = MainActivity.this;
        return mContext;
    }

并且

在你想要的每个类中使用这个:

MainActivity mContext = new MainActivity();
        SharedPreferences sharedPrefs = 
PreferenceManager.getDefaultSharedPreferences(mContext.getContext());            

0
SharedPrefernces prefs = getPreferences();
String sound = prefs.getString("sound");

请确保您在偏好设置文件中使用了相同的文件名。


0

Kotlin中的解决方案

在Activity1中设置偏好:

fun setPref(key: String, value: String) {
    val prefs = getSharedPreferences("your_prefs_name", Context.MODE_PRIVATE)
    val editor = prefs.edit()
    editor.putString(key, value)
    editor.apply()
}

在Activity2中获取偏好设置:

fun getPrefs(key: String): String? {
    val prefs = getSharedPreferences("your_prefs_name", Context.MODE_PRIVATE)
    return prefs.getString(key, "default_value")
}

除了字符串值,您还可以将其他基元放入共享首选项中:https://developer.android.com/reference/android/content/SharedPreferences.Editor


0

在你的公共类MainActivity中使用这个,继承自AppCompatActivity(或其他类)

public static void setDefaults(String key, String value, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getDefaults(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

然后使用这些函数:

String name = getDefaults("key_name", getApplicationContext());
setDefaults("key_name", "Matthew", getApplicationContext());

如果键不存在,函数getDefaults将返回null。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接