根据点击的按钮在SharedPreferences中保存变量

时间:2015-04-24 06:18:17

标签: java android sharedpreferences

我正在尝试为我的应用制作EULA,但我们合作的不同国家/地区有不同的EULA。

我的想法是我在SharedPreferences中保存一个字符串,如南非的ZA和肯尼亚的KE。因此,如果单击南非按钮,它将在SharedPreferences中将字符串保存为ZA,对肯尼亚也是如此。单击按钮后,新活动将通过从SharedPreferences中提取ZA或KE字符串来加载相应的EULA。这就是我现在所拥有的:

Country_select.java

public class country_select extends Activity {


private static final String TAG = "Logs";
public static final String PREFS_NAME = "PrefsFile";

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

    final Button za_button = (Button) findViewById(R.id.btn_za);
    Button ke_button = (Button) findViewById(R.id.btn_ke);
    Log.i(TAG, "created buttons");

    za_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("Country_Selected", "ZA");
            editor.commit();
        }
    });

    Log.i(TAG, "set button settings for ZA");
    ke_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("Country_Selected", "KE");
            editor.commit();
        }
    });
    Log.i(TAG, "set button settings for KE");
}

我可能有这个完全不正确但在布局文件上有2个按钮,一个用于KE,一个用于ZA。

我希望它能够在加载新活动时读取SharedPreferences是否有ZA或KE?我在这里所做的是正确的吗?

谢谢

3 个答案:

答案 0 :(得分:1)

我认为您最好使用IntentExtras,在点击国家/地区按钮时的第一个活动中存储变量中的值,当您想要启动新活动时,将数据作为意图传递额外:

Intent intent= new Intent(getActivity(), NewActivity.class);
intent.putExtra("country", countryCode);
startActivity(intent);

然后在新活动中,你可以检索这样的值:

String countryCode = getIntent().getExtras().getString("country");

答案 1 :(得分:0)

为了在整个应用程序中维护共享首选项,我以这种方式使用它 ,看一看

我将AppPrefes类保存为包

中的seprate类
public class AppPrefes {

    private SharedPreferences appSharedPrefs;
    private Editor prefsEditor;

    public AppPrefes(Context context, String Preferncename) {
        this.appSharedPrefs = context.getSharedPreferences(Preferncename,
                Activity.MODE_PRIVATE);
        this.prefsEditor = appSharedPrefs.edit();
    }

    /****
     * 
     * getdata() get the value from the preference
     * 
     * */
    public String getData(String key) {
        return appSharedPrefs.getString(key, "");
    }

    public Integer getIntData(String key) {
        return appSharedPrefs.getInt(key, 0);
    }

    /****
     * 
     * SaveData() save the value to the preference
     * 
     * */
    public void SaveData(String Tag, String text) {
        prefsEditor.putString(Tag, text);
        prefsEditor.commit();
    }

    public void SaveIntData(String key, int value) {
        prefsEditor.putInt(key, value);
        prefsEditor.commit();
    }

    /**
     * delete all AppPreference
     */
    public void deleteAll() {
        this.prefsEditor = appSharedPrefs.edit();
        this.prefsEditor.clear();
        this.prefsEditor.commit();
    }

在您的活动或片段中,您希望获取或保存数据,只需像这样使用它

Decalre AppPrefes类的对象

AppPrefes appPref;

在onCreate中初始化

appPref = new AppPrefes(getActivity(), "type name of your preference");

要将数据保存到首选项,请使用

appPref.SaveData("tag_name", "value to be saved);

从首选项中获取数据

appPref.getData("tag_name");

如果需要,您还可以保存整数值并清除所有首选项值,只需调用apporopriate方法。

答案 2 :(得分:0)

是的,存储部分是正确的。现在,您需要访问新活动中的存储值。

实施例 -

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
String storedCountry = sharedpreferences.getString("Country_Selected"); // could be null value if there is no value stored with Country_Selected tag.