2012-09-15 44 views
2

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

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名球员,我想保存他们各自的分数,我该怎么做?

回答

1

putString只需要两个参数:

  • 第一个参数以 “钥匙”
  • 第二个参数取值为”

你应该使用:

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

+0

非常感谢您的帮助!但我的想法是,插槽数是游戏的整数,这意味着在插槽1中有P1,P2,P3和P4分数,然后当插槽2时,有另一组4个玩家得分。如果使用上面的slot1,slot2,slot3和slot4,它会把这个槽弄乱成Key。或者我的意思是使用4套sharedpreference(每个玩家一个),然后为每个玩家保存每一轮?因为一开始我希望能够使用1个键同时存储4个玩家的数据 – pearmak

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 
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... 

另外请注意,你需要一个独特的密钥来检索行。

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

+0

String [] scores = scoreString.split(“|”)后我怎么能得到P1Score,P2Score等? – pearmak

+0

查看最新的答案。它会将字符串分割成一个字符串数组。 –

+0

感谢您的帮助。但我已经尝试并输入12到P1EditText,34到P2EditText,56到P3EditText,78到P4EditText,当检索出时,它变成P1 =无,P2 = 1,P3 = 2和P4 = |,这怎么处理? – pearmak

0

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

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

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

还注意到,如果您将使用相同的密钥,它会覆盖现有的分数,下一次您将应用分数,我不知道你试图达到什么,但它将是唯一的最后得分系统或类似的东西。