我应该在MainActivity中定义SharedPreferences吗?

时间:2017-06-22 06:18:00

标签: java android android-activity sharedpreferences

我有四个ActivitiesMainActivityHomeActivitySecondActivityThirdActivity

我正在使用MainActivity作为欢迎屏幕,我的应用程序从HomeActivity开始。我在SharedPreferences中定义了HomeActivity

外部OnCreate方法

SharedPreferences settings;
SharedPreferences.Editor editor;

OnCreate内:

settings = getSharedPreferences("app_settings", Context.MODE_APPEND);
editor = settings.edit();

我的问题是我的SharedPreferences仅适用于HomeActivity。 我也想在sharedPreferences中拨打SecondActivity

我该怎么办?

4 个答案:

答案 0 :(得分:3)

您可以像这样使用SharedPreferences实现单例

public class SPManager {

    private static final String TAG = SPManager.class.getName();

    private static SPManager instance;

    private Context mContext;
    private SharedPreferences mPrefs;


    private static final String PREF_NAME = "com.package.app";

    private static final String KEY_NAME = "user_name";


    public static SPManager getInstance(Context context) {
        if (instance == null) {
            instance = new SPManager(context);
        }
        return instance;
    }

    private SPManager(Context context) {
        mContext = context;
        mPrefs = mContext.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    }


//    Example
    public void addName(String name) {
        mPrefs.edit().putString(KEY_NAME, name).apply();
    }

    public String getName() {
        return mPrefs.getString(KEY_NAME, "John Doe");
    }
}

你也可以像这样使用这个单身:SPManager.getInstance(context).getName();

使用起来很简单并且更新它。

希望能帮到你。

答案 1 :(得分:2)

请创建一个类,如Datastorage

Datastorage.WritePreference("id",idvalue, getApplicationContext());

在您的应用程序内部的每个位置使用此类之后,

在我的login.java类中,我将id存储在共享偏好中,如

String id  = (String) Datastorage.ReadFromPreference("id",Datastorage.STRING_KEY,getApplicationContext());

在home.java之后我读了这个id值,

{{1}}

答案 2 :(得分:1)

创建一个名为BaseActivity的扩展类

class BaseActivity{
     SharedPreferences settings;
     SharedPreferences.Editor editor;

     onCreate(){
         settings = getSharedPreferences("app_settings", Context.MODE_APPEND);
         editor = settings.edit();
     }
}

然后,在任何活动中只需扩展它.. ex:SecondActivity扩展BaseActivity

class SecondActivity extends BaseActivity{
     onCreate(){
        editor.putString("","").apply();
     }
}

class FirstActivity extends BaseActivity{
     onCreate(){
        editor.putString("","").apply();
     }
}

.....

答案 3 :(得分:1)

只需在您想要共享偏好值

的任何地方调用此自定义方法即可
public void retrivePreference() {

    SharedPreferences settings = getSharedPreferences("app_settings", Context.MODE_APPEND);
    String value1 = setting.getString("key1", null);
    String value2 = setting.getString("key2", null);

}