Android SharedPreference

时间:2012-09-15 15:11:35

标签: android sharedpreferences

您好我正在制作一张记分卡,显示游戏中4名玩家的得分,当用户按下按钮时,会插入一个新行。我是这样做的:

   private void makeTag(String P1Score, String P2Score, String P3Score, String P4Score, String slot)
   {
      // originalQuery will be null if we're modifying an existing search
      String originalScore = SavedSlots.getString(slot, null);

      // get a SharedPreferences.Editor to store new slot/scores
      SharedPreferences.Editor preferencesEditor = SavedSlots.edit();
      preferencesEditor.putString(slot, P1Score, P2Score, P3Score, P4Score); // to store
      preferencesEditor.apply(); // store the updated preferences

然后在putString下面提示输出错误:

The method putString(String, String) in the type SharedPreferences.Editor is not  
applicable for the arguments (String, String, String, String, String).

似乎一次只能存储2个变量? (即插槽和P1Score)。

有4名球员,我想保存他们各自的分数,我该怎么办?

5 个答案:

答案 0 :(得分:1)

putString只需要两个参数:

  • 第一个参数取“key”
  • 第二个参数取值“

你应该使用:

private void makeTag(String P1Score, String P2Score, String P3Score, String P4Score, String slot)
{
    // originalQuery will be null if we're modifying an existing search


    //* For Save your score//

    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor preferencesEditor = SavedSlots.edit();

    preferencesEditor.putString("slot1", "P1Score") // to store
    preferencesEditor.putString("slot2", "P2Score") // to store
    preferencesEditor.putString("slot3", "P3Score") // to store
    preferencesEditor.putString("slot4"," P4Score") // to store
    preferencesEditor.commit(); // store the updated preferences

获得分数。

String  palyer1 = settings.getString("slot1", "notfound);
String  palyer2 = settings.getString("slot2", "notfound);
String  palyer3 = settings.getString("slot3", "notfound);
String  palyer4 = settings.getString("slot4", "notfound);

更多信息:http://developer.android.com/guide/topics/data/data-storage.html

答案 1 :(得分:0)

.putString()只有2个参数。第一个是关键,第二个是值。 所以你必须做类似的事情:

SharedPreferences.Editor preferencesEditor = SavedSlots.edit();
for(int i = 1; i<=4; i++){
      preferencesEditor.putString("player_" + i, HisScore);
}
preferencesEditor.apply(); // store the updated preferences

答案 2 :(得分:0)

SharedPreferences解决方案就像地图一样工作。一个VALUE到一个KEY

您可以通过将字符串与分隔符连接来解决此问题:

preferencesEditor.putString(slot, P1Score+"|"+P2Score+"|"+P3Score+"|"+P4Score);

并在检索时:

String scoreString = preferences.getString(slot, "");
// each item in this array will be one score
String [] scores = scoreString.split("|");

String playerOneScore = scores[0];
String playerTwoScore = scores[1];
//... and so on...

另请注意,您需要一个唯一的KEY来检索行。

但它真的很乱。您可以使用SQLiteDatabase,您可以根据需要向键(索引列)添加任意数量的值(列)。

答案 3 :(得分:0)

方法putString不能像错误那样使用......

“SharedPreferences.Editor类型中的方法putString(String,String)不是
适用于参数(String,String,String,String,String)。“

SharedPreferences.Editor putString (String key, String value)

答案 4 :(得分:0)

如果你想存储4个分数,你需要调用putString方法4次。 它应该是这样的:

preferencesEditor.putString("p1Score", score1);
preferencesEditor.putString("p2Score", score2);
preferencesEditor.putString("p3Score", score3);
preferencesEditor.putString("p4Score", score4);

因为putString方法参数是键和值,而不是键和4个值,就像你试图做的那样。

另请注意,如果您将使用相同的密钥,下次您将应用分数,它将覆盖现有分数,我不确定您尝试实现的目标,但它仅适用于最终分数系统或类似的东西。