Android中的SharedPref未按下按钮时保存数据

时间:2014-07-02 11:39:13

标签: java android sharedpreferences

好吧,我试图将一组三个电话号码保存到共享的首选项。当我点击保存时,它会遍历所有代码和吐司,然后结束弹出但是应该保存的数字不显示,而是显示我为每个数字输入的默认文本。有兴趣的难题。无论如何,在我正在使用的代码块中。

        saveNums.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String num1String;
            num1String = num1.getText().toString();
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString(constants.num1, num1String);
            editor.commit();

            String num2String;
            num2String = num2.getText().toString();
            SharedPreferences.Editor editor2 = prefs.edit();
            editor2.putString(constants.num2, num2String);
            editor2.commit();

            String num3String;
            num3String = num3.getText().toString();
            SharedPreferences.Editor editor3 = prefs.edit();
            editor3.putString(constants.num3, num3String);
            editor3.commit();

            Toast.makeText(c, "Contact's have been saved: " + "\n" + constants.num1 + "\n" + constants.num2 + "\n" + constants.num3, Toast.LENGTH_LONG)
                    .show();

        }
    });

这是共享的pref文件:

import android.content.SharedPreferences;

public class constants {
    public static String PREF_NAME = "sharedString";
    public static String num1 = "num1";
    public static String num2 = "num2";
    public static String num3 = "num3";
    SharedPreferences prefs;
}

点击saveNums按钮时没有错误。所有相同的数字也没有被保存。关于如何解决这个问题的任何想法都会很棒。

3 个答案:

答案 0 :(得分:1)

在我看来,您似乎没有理解一般SharedPreferences键/值对的概念。

SharedPreferences可用于存储与自由选择键相关联的值。

示例:

String key = "key";

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Context);
Editor e = prefs.edit();

e.putString(key, "stringtosave");
e.commit();

这意味着,值“stringtosave”现在存储在SharedPreferences中,与键“key”相关联。检索值时,您需要再次提供密钥。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Context);
String retrieved = prefs.getString(key); // retrieved will then contain "stringtosave"

您在Toast消息中正在执行的操作是显示与您保存的值相关联的键。这些键永远不会改变,显然总是具有相同的值。

如果要在Toast消息中显示实际保存的值,则需要从SharedPreferences检索它或使用刚刚存储的值(例如“num1String”)。

答案 1 :(得分:1)

在助手类中添加此代码

public static final String MY_ST_PREFS = "what ever you want";

public static void savePreferences(Context context, String key, String value) {

    SharedPreferences sharedPreferences = context.getSharedPreferences(
            MY_ST_PREFS, 0);
    Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPreferences(Context context, String key) {

    String prefsStr = "";

    SharedPreferences sharedPreferences = context.getSharedPreferences(
            MY_ST_PREFS, Context.MODE_PRIVATE);
    prefsStr = sharedPreferences.getString(key, "");

    return prefsStr;

}

onButton点击中,只需添加此内容即可在Shared Preferences

中保存数据
yourhelperclass.savePreferences(context,"yourkey",yourstringvalue);

获取Shared preferences数据只需使用此代码

String myString = yourhelperclass.getPreferences(context,"yourkey");

我希望这会奏效......

答案 2 :(得分:0)

存储在共享首页

public synchronized void storeInPref(Context context, String key, String value) {
        SharedPreferences preferences = context.getSharedPreferences(
                PREFERENCE_NAME, Context.MODE_PRIVATE);
        Editor prefEditor = preferences.edit();
        prefEditor.putString(key, value);       
        prefEditor.commit();
    }

从共享首页

中检索
public synchronized String getFromPref(Context context, String key) {
        SharedPreferences pref = context.getSharedPreferences(PREFERENCE_NAME,
                Context.MODE_PRIVATE);
        return pref.getString(key, null);
    }