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

Java Android中的SharedPref未在按下按钮时保存数据,java,android,sharedpreferences,Java,Android,Sharedpreferences,好的,我正在尝试将一组三个电话号码保存到一个共享的pref中。当我点击save时,它会遍历所有代码,并弹出祝酒词,但应该保存的号码不会显示出来,而是显示我为每个号码输入的默认文本。有趣的难题。无论如何,在我正在使用的代码块中 saveNums.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Stri

好的,我正在尝试将一组三个电话号码保存到一个共享的pref中。当我点击save时,它会遍历所有代码,并弹出祝酒词,但应该保存的号码不会显示出来,而是显示我为每个号码输入的默认文本。有趣的难题。无论如何,在我正在使用的代码块中

        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按钮时,不会出现任何错误。同样,这些数字也没有被保存。关于如何解决这一问题的任何想法都将非常棒。

在我看来,您似乎还不理解
共享引用和键/值对的概念

SharedReferences
可用于存储与自由选择键关联的值

例如:

String key = "key";

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

e.putString(key, "stringtosave");
e.commit();
这意味着值“stringtosave”现在存储在与键“key”关联的
共享参考文件中。检索值时,需要再次提供密钥

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Context);
String retrieved = prefs.getString(key); // retrieved will then contain "stringtosave"
您在
Toast
消息中所做的是显示与您保存的值相关联的键。这些键永远不会改变,显然总是具有相同的值


如果您想在
Toast
消息中显示实际保存的值,您需要从
SharedReferences
中检索它,或者使用刚才存储的值(例如“numString”)。

存储在shared pref

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);
    }
从共享pref中检索

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

在助手类中添加此代码

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;

}
然后在您的
on按钮中
单击仅添加此按钮即可将数据保存在
共享首选项中

yourhelperclass.savePreferences(context,"yourkey",yourstringvalue);
要获取
共享首选项
数据,只需使用以下代码

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

我希望这能起作用…

检查在“constants.num1”中检索值和应用SharedReference的确切方法不起作用如何实例化
prefs
?正如@IvoBeckers所说,您必须在代码中的某个地方使用GetSharedReference实例化SharedReference。你在哪里做的?很好,我知道它是怎么工作的。从本质上讲,它将所有主要工作都放在文件中,并将其放在一些方法中。太好了,谢谢!