Java Android中的SharedPref未在按下按钮时保存数据
好的,我正在尝试将一组三个电话号码保存到一个共享的pref中。当我点击save时,它会遍历所有代码,并弹出祝酒词,但应该保存的号码不会显示出来,而是显示我为每个号码输入的默认文本。有趣的难题。无论如何,在我正在使用的代码块中Java Android中的SharedPref未在按下按钮时保存数据,java,android,sharedpreferences,Java,Android,Sharedpreferences,好的,我正在尝试将一组三个电话号码保存到一个共享的pref中。当我点击save时,它会遍历所有代码,并弹出祝酒词,但应该保存的号码不会显示出来,而是显示我为每个号码输入的默认文本。有趣的难题。无论如何,在我正在使用的代码块中 saveNums.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Stri
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。你在哪里做的?很好,我知道它是怎么工作的。从本质上讲,它将所有主要工作都放在文件中,并将其放在一些方法中。太好了,谢谢!