【问题标题】:How to persist the time and score using shared preferences如何使用共享偏好保持时间和分数
【发布时间】:2011-12-29 09:39:12
【问题描述】:

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

我想在点击得分按钮后,按得分从高到低显示所有时间和得分。

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

我想在乐谱页面中显示这种格式:

时间............得分

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();
}
}

请给我好的建议,怎么做?

【问题讨论】:

    标签: android arraylist sharedpreferences


    【解决方案1】:

    最简洁的方法是使用 sqlite 数据库。

    使用SharedPreferences 要容易得多,尤其是对于初学者。 你可以这样做:你保存第三个项目,实际条目计数为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”是 SCORE 的 SharedPreference-Key 并且当时相同。

    阅读将采用相同的方案。

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

    【讨论】:

      【解决方案2】:

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

      1) 首先你必须存储时间,一旦完成,你必须存储在给定时间映射的分数,

      你正在这样做, edit.putString("DATA", strTime+" "+intScore);

      但是,如果您一次只有一名玩家在玩,您可以采取不同的方法, edit.putString("TIME", strTime); edit.putString(strTime, strScore);

      1:10 .................. 175 所以这里首先将时间映射到 TIME,然后将分数 175 映射到 1:10

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        好主意是定义 Java bean 持有分数(比如用 2 个字段,时间以秒/点/可能是日期/名称/您喜欢存储的其他字段)。您可以轻松地使用它们进行以下操作:

        • 在列表中排序并限制它们的数量(你不喜欢有 10000 个分数条目,100 个就足够了)
        • 将此列表编组到/从 JSON(无耻自我广告:https://github.com/ko5tik/jsonserializer
        • 将 JSON 存储在共享首选项或私有应用程序文件中(我最多存储 100 个本地高分条目,以及 1000 个所有时间分数和使用文件)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-29
          • 1970-01-01
          • 2014-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多