如何使用共享首选项持续时间和得分

时间:2011-12-29 09:39:13

标签: android arraylist sharedpreferences

我正在开发简单的应用程序,它就像游戏一样。当我完成游戏后,显示的页面显示为时间得分。现在,如果我想一次又一次地玩这个游戏。如何存储以前的所有时间和分数和当前完成。

我希望在点击分数按钮后,根据从高到低的分数显示所有时间并进入列表。

我在赠品页面中完成了共享偏好,并且该值来自得分页面。但是为什么不在第三次比赛时显示。第二次没关系。第三次等等......只是替换向上。我没有足够的想法,如何将所有信息存储到数组并显示在列表中。但我尝试使用地图,但没有更多的想法。

我想在分数页面中显示这种格式:

  

时间..............分数

     

1:10 .............. 175

     

2:05 .............. 145

     

1:15 .............. 110

     

2:50 ............... 90

这里我刚刚启动了一些代码但不完整且更好,

GaveOver.Java

Where just diplay socre , time and mistakes after finish game.

Score.Java

public class Scores extends Activity {
private static String strTime;
private static int intScore;
public static SharedPreferences settings;
public static final String MY_PREFS_NAME = "PrefName";
@Override
protected void onCreate(Bundle savedInstanceState) {
    ImageView back, reset, score_home;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.score);

    // lv = (ListView) findViewById(R.id.listView);

    getValuesFromGaveOver();

    SharedPreferences pref = this.getSharedPreferences(MY_PREFS_NAME, 0);
    String data=pref.getString("DATA", "Nothing");
    Log.i("horror", "DATA "+data);      
}
private void getValuesFromGaveOver() {
    SharedPreferences pref = this.getSharedPreferences(MY_PREFS_NAME, 0);
    strTime = pref.getString(TIME, "n/a");
    intScore = pref.getInt(SCORE, -1);
    Log.i("horror", "From Gave Over  "+"Time="+strTime+"   "+"Score="+intScore);
}
@Override
protected void onStop() {
            super.onStop();
    SharedPreferences pref = this.getSharedPreferences(MY_PREFS_NAME, 0);
    strTime = pref.getString(TIME, "");
    intScore = pref.getInt(SCORE, -1);

    savePreferences(intScore, strTime);

}

private void savePreferences(int s, String t) {
    SharedPreferences sPref = this.getSharedPreferences(MY_PREFS_NAME, 0);
    SharedPreferences.Editor edit = sPref.edit();
    edit.putString("DATA", strTime+" "+intScore);
      edit.commit();
}
}
请给我一个好的建议,怎么做?

3 个答案:

答案 0 :(得分:0)

最干净的方法是使用sqlite数据库。

使用SharedPreferences要容易得多,尤其是初学者。 您可以这样做:您保存第3项,实际条目数为SharedPreference。 每次保存新条目时,都会增加此计数器。 然后将当前计数器编号附加到TIME和SCORE键。

// Saves a new entry | Attention: code not tested!
save(int score, int time){
 SharedPreference pref = ...
 SharedPreference.Editor editor = ...

 int newEntryID = pref.getInt("numEntries", 0) + 1;

 editor.setInt("numEntries", newEntryID);
 editor.setInt("score" + newEntryID, score);
 editor.setString("time" + newEntryID, time); 
 editor.commit();
}

假设"得分"是SCORE的SharedPreference-Key,当时也是如此。

阅读将采用相同的方案。

for(int i=0; i<numEntries; ++i){
  pref.getInt("score" + i, 0);
  ...
}

答案 1 :(得分:0)

使用共享首选项,您可以存储两者,

1)首先你需要存储时间,一旦完成,你必须在给定时间内存储得分,

你是这样做的, edit.putString(“DATA”,strTime +“”+ intScore);

但是如果你一次只玩一个玩家,你可以采取不同的方法, edit.putString(“TIME”,strTime); edit.putString(strTime,strScore);

1:10 .............. 175 所以首先用时间映射你的时间,然后用1:10

绘制得分175

希望这会对你有所帮助

答案 2 :(得分:0)

好主意是定义Java bean持有分数(例如,使用2个字段,以秒为单位的时间/点/可能是日期/名称/您希望存储的其他字段)。您可以轻松地使用它们:

  • 在列表中排序并限制其金额(您不希望有10000个分数条目,100个将是足够的)
  • 将此列表编入JSON(无耻自我广告:https://github.com/ko5tik/jsonserializer
  • 将JSON存储在共享首选项或私有应用程序文件中(我最多可存储100个本地高分条目,以及1000个所有时间分数并使用文件)