我正在制作报价应用程序,我使用共享优先级来存储用户喜欢的引号。我知道我可以使用SQL,但我暂时坚持使用共享的prefrences。这是我保存最喜欢的报价的方式:
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"上?
答案 0 :(得分:0)
在您的示例中,您只保存最新的报价。您可以使用putStringSet(),因此在SharedPreferences中保存一组字符串。如果您需要保留订单,另一种可能的方法是将报价存储在文件中。
答案 1 :(得分:0)
首先是第一件事:这实际上是一个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:);
}
显然,根据你的目标,某些选项可能比其他选项更好。
答案 2 :(得分:0)
使用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();