共享首选项保存和检索数据
Posted
技术标签:
【中文标题】共享首选项保存和检索数据【英文标题】:Shared Preferences save and retrieve data 【发布时间】:2014-07-25 13:35:36 【问题描述】:我正在使用共享首选项来保存来自 AutoCompleteTextView 的数据。 当用户在这个AutoCompleteTextView中写东西时,他可以点击一个按钮来保存他刚刚写的东西(这样他就不必每次都写了)。
我的代码如下所示:
private AutoCompleteTextView autoComplete = null;
String nameFile = "Web service data";
String myData = "";
SharedPreferences pref;
Editor editor;
String channel = "";
String[] valuesArray = channel;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
editor = pref.edit();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, valuesArray);
autoComplete = (AutoCompleteTextView) findViewById(R.id.autocompletion);
autoComplete.setAdapter(adapter);
Button add = (Button) findViewById(R.id.add);
add.setOnClickListener(sendForm2);
Button remove = (Button) findViewById(R.id.remove);
remove.setOnClickListener(sendForm2);
channel = pref.getString(nameFile, null);
OnClickListener sendForm2 = new OnClickListener()
public void onClick(View v)
switch (v.getId())
case R.id.add:
myData = autoComplete.getText().toString();
editor.putString(nameFile, myData);
editor.commit();
break;
case R.id.remove:
editor.remove(nameFile);
editor.commit();
break;
;
问题是,共享首选项根本不会在频道中保存任何数据。即使我关闭应用程序并重新启动它。 任何线索或想法如何解决这个问题?
【问题讨论】:
你怎么知道它没有保存? 因为在我按下按钮添加并重新启动应用程序后输入值不在 AutoCompleteTextView 中。我无法检索该值,好像尚未完成保存一样。 我看到你设置了[频道],但我没有看到你用它做任何事情。甚至不只是记录它以查看它是否为空 您在哪里从 SharedPrefernce 读取数据?另外据我所知,您正在用新输入的值覆盖最新值,因此不会有任何列表,只有一个值 “Channel”存储在 AutoCompleteTextView 中使用的数组“valuesArray”中。 【参考方案1】:我会尝试的第一件事是添加一个
Log.d("OnCreate", "channel : "+ channel);
在onCreate之后
channel = pref.getString(nameFile, null);
看看你里面有没有东西。
如果你不这样做,这真的意味着 sharedpref 没有保存。
在这种情况下,我会尝试恢复:
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
editor = pref.edit();
就在
之前switch (v.getId())
我记得读到过,有时根据您对活动所做的操作,您创建的 sharedpref 编辑器可能会“丢失”,并且与代码中的任何内容都无关。
【讨论】:
谢谢,根据LogCat,频道确实是空的。 太好了,那就试试我的其他建议并告诉我们吧! 它导致应用程序崩溃,我会检查并纠正错误。【参考方案2】:使用以下方法保存和检索字符串的优先级。
//通过key和data保存prefrence
public static void SavePrefrence(Context ctx, String Key, String value)
ctx.getSharedPreferences("mypref", ctx.MODE_PRIVATE)
.edit().putString(Key, value).commit();
//通过传递你的密钥来获得优先权
public static String getPrefrence(Context ctx, String key)
SharedPreferences pref = ctx.getSharedPreferences(
"mypref", ctx.MODE_PRIVATE);
String result = pref.getString(key, null);
return result;
【讨论】:
以上是关于共享首选项保存和检索数据的主要内容,如果未能解决你的问题,请参考以下文章
在 Xamarin.Android 中将 Json 对象项中的错误值保存和检索到 IShared 首选项(始终返回注销值)