【问题标题】:Android - How do I get sharedpreferences from another activity?Android - 如何从另一个活动中获取共享首选项?
【发布时间】:2011-09-05 09:07:15
【问题描述】:

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

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

声音和游戏在另一个活动 (activity2) 中开始。我需要在那里阅读 set 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 的 btn,在此我总是在 Toast 消息中显示“0”。

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:
    SharedPrefernces prefs = getPreferences();
    String sound = prefs.getString("sound");
    

    确保您为首选项文件提到了相同的文件名。

    【讨论】:

      【解决方案2】:
      SharedPreferences myPrefs = getSharedPreferences("filename", MODE_PRIVATE);         
      String ipAdrs=myPrefs.getString("key", "");
      

      如果键里面没有任何值,它会给出你在值("key", "")中给出的默认值

      【讨论】:

        【解决方案3】:

        使用以下函数添加共享偏好并从所有活动中获取保存的值。

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

        【讨论】:

        • 如何使用这些函数访问共享偏好值?
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          你可以保存一个活动:

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

          【讨论】:

            【解决方案6】:

            这么简单!但请记住一件事,您必须在创建的活动中定义 Preferences name public static like
            public static String Preference = "yourPreferenceName";

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

            SharedPreferences myPreferences =getSharedPreferences("YourprefereneName",MODE_PRIVATE)
            

            【讨论】:

              【解决方案7】:

              首先在MainActivity中创建获取Context的方法:

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

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

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

              【讨论】:

                【解决方案8】:

                为共享偏好创建类

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

                并使用此类任何活动和片段 并将数据轻松存储在共享偏好中

                【讨论】:

                  【解决方案9】:

                  在您的公共类 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

                  【讨论】:

                    【解决方案10】:

                    假设如果您正在为 SharedPreference 创建一个不同的类,那么如果您只想通过一个活动获取首选项值,请在构造函数中传递活动。如果您想从多个活动访问传递上下文。

                    public Prefs_Name(Context context) {
                            this.preferences = PreferenceManager.getDefaultSharedPreferences(context);
                        }
                    

                    像这样。 从不同的活动调用它时,只需获取该活动的上下文,并在创建 sharedpreference 类的对象时传递该上下文。然后您可以更改首选项,甚至从那里访问保存数据。

                     PreferenceManager.getDefaultSharedPreferences(context);
                        prefs_name=new Prefs_Name(context);
                    

                    希望对你有帮助。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2019-09-01
                      • 2012-09-08
                      • 2011-11-21
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2012-06-16
                      • 1970-01-01
                      相关资源
                      最近更新 更多