繁体   English   中英

使用SharedPreferences存储多个“收藏夹”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM