2011-12-29 33 views
0

我正在開發簡單的應用程序,它就像遊戲一樣。當我完成比賽的時候給了頁面顯示,其中時間得分。現在,如果我想一次又一次地玩那個遊戲。如何存儲以前的所有時間和分數,並且當前完成。如何使用共享偏好持續時間和分數

我想要顯示所有時間並按照評分按鈕點擊得分從高到低評分。

我已經在轉寫頁面完成了共享首選項,並且該值來自得分頁面。但爲什麼不顯示當我第三次玩。第二次沒事。第三次等等..只是向上取代。我沒有足夠的想法,如何將所有信息存儲到數組中並顯示在列表中。但我嘗試使用地圖,但沒有更多的想法。

我想將比分頁面來顯示這種類型的格式:

時間..............分數

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

請給我好的建議,怎麼做?

回答

0

最簡潔的方法是使用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的SharedPreference-Key和時間相同。

閱讀將是相同的計劃。

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

使用共享的首選項,你可以同時存儲,

1)首先你要保存的時間,一旦做到這一點,你必須存儲分數映射在給定的時間,

你這樣做, edit.putString(「DATA」,strTime +「」+ intScore);

但是,如果你一次只有一個玩家玩,你可以採取不同的方法, edit.putString(「TIME」,strTime); edit.putString(strTime,strScore);

1:10 .............. 175 所以在這裏首先你時間映射你的時間,然後你映射得分175 1:10

希望這將有助於你

0

好主意是定義Java bean持有分數(例如說2字段,時間以秒/點/可能日期/名稱/你喜歡存儲什麼其他領域)。您可以輕鬆地與他們做如下:

  • 排序列表中並限制其數量(你不喜歡有得分的條目10000,100將是anough)
  • 馬歇爾此列表/從JSON(無恥的自我廣告:https://github.com/ko5tik/jsonserializer
  • 店JSON在共享偏好或在一個私有應用程序文件(我存儲多達100個本地高分條目,1000所有的時間分數和使用文件)