使用SharedPreferences存储多个"收藏夹"

时间:2014-03-14 18:44:00

标签: java android

我正在制作报价应用程序,我使用共享优先级来存储用户喜欢的引号。我知道我可以使用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"上?

3 个答案:

答案 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();