![](/img/trans.png)
[英]How to use SharedPreferences to save and retrive more than one old values?
[英]Use SharedPreferences to store more than one “favorite”
我正在制作一个报价应用程序,并且正在使用共享首选项来存储用户喜欢的报价。 我知道我可以使用SQL,但是我暂时坚持使用共享偏好。 这就是我保存最喜欢的报价的方式:
if(view.getId()==R.id.favoritesBtn){
String stringData = quote.getText().toString();
SharedPreferences.Editor editor = someData.edit();
editor.putString("quote_string", stringData);
editor.commit();
}
if(view.getId()==R.id.button){
someData=getSharedPreferences(filename,0);
String dataReturned = someData.getString("quote_string", "Couldn't Load Data");
dataResults.setText(dataReturned);
}
dataResults当然是显示已保存报价的textview。 现在,当我尝试保存另一个报价时,我的问题来了。 第一个保存的报价被覆盖,并且每次用户仅看到其最后一个“保存的”报价时。 我怎样才能使用户看到他按下“ favoritesBtn”的所有引用?
在您的示例中,您仅保存最新报价。 您可以使用putStringSet(),以便在SharedPreferences中保存一组字符串。 如果需要保留订单,另一种可能的方法是将报价保存在文件中。
首先是第一件事:这确实是sql数据库的工作(特别是因为您可以保存多个值)
现在实际回答您的问题:
您在这里有几个选择。
您可以使用putStringSet()在首选项中放置一整套引号
您可以遍历所有共享的首选项
将您喜欢的“ quote_string”另存为定界格式
String quotes = someData.getString("quote_string", "");
quotes = quotes + "|" + <new quote>;
editor.put("quote_string", quotes);
//more code
String dataReturned = someData.getString("quote_string", "");
String[] separatedQuotes = dataReturned.split("|");
保存首选项以及指向报价首选项名称:
String quoteNames = someData.getString("quote_names", "");
if (quoteNames.length() > 0)
quoteNames += "," + <quote_name>
quoteNames = "quote" + quoteNames.split("|").length;
editor.put("quote_names", quoteNames);
//more code
String dataReturned = someData.getString("quote_names", "");
String[] separatedQuoteNames = dataReturned.split("|");
for (String separatedQuoteName: separatedQuoteNames) {
String quote = someData.getString(separatedQuoteName, "No Data:);
}
显然,根据您的目标,某些选择可能会比其他选择更好。
为此使用putStringSet()
:
Set<String> quotes = someData.getStringSet("quote_string", new HashSet<String>());
quotes.add(stringData);
SharedPreferences.Editor editor = someData.edit();
editor.clear();
editor.putStringSet("quote_string", quotes);
editor.commit();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.