2012-12-17 23 views
0

我想我現在有一個功能齊全的瑣事遊戲。在結果頁面的遊戲結束時,它顯示一個分數(長)和百分比(int)。我想實現一個離線的SharePreferences高分,現在輸入3個變量 - rank(int),score(long)和percentage(int)。我試圖首先實現一個變量的高分,然後再添加其他兩個變量,但我似乎失敗了。你可以在我的下面的活動中看到很多註釋掉的代碼,我正在嘗試的東西以及許多其他嘗試已經被刪除。與SharedPreferences離線高分 - Android(java)

這是我第一次嘗試使用SharedPreferences,所以我還沒有很好的把握。

Results.java

public class Results extends Activity { 

    public static final String SP_NAME = "TEST"; 
    public static final String INT_PERCENTAGE = "SP_percentage"; 
    public static final String INT_RANK = "SP_rank"; 
    public static final String LONG_SCORE = "SP_score"; 
    private SharedPreferences mPrefs; 

    QuestionView qv = new QuestionView(); 
    ArrayList<Question> queryList = qv.getQueries(); 

    int cAnswers, wAnswers, percentage, rank; 

    long score; 

    ArrayList<Question> qs; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.resultsmain); 

     mPrefs = getSharedPreferences(SP_NAME, 0); 

     cAnswers = getIntent().getIntExtra("correctAnswers", -1); 
     wAnswers = getIntent().getIntExtra("wrongAnswers", -1); 
     score = getIntent().getLongExtra("score", -1); 

     qs = getIntent().getParcelableArrayListExtra("queries"); 

     Button mainmenuBtn = (Button)findViewById(R.id.mainmenuBtn); 
     mainmenuBtn.setText("Main Menu"); 

     mainmenuBtn.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       restart(); 
      } 
     }); 

     //Retrieving high score 
     SharedPreferences mPrefs = getSharedPreferences(LONG_SCORE, 0); 
     SharePreferences.Editor editor = prefs.edit(); 
     long highscore = mPrefs.getLong(LONG_SCORE, 0); 

     //Saving current score as high score 
/*  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putInteger(HIGH_SCORE, currentScore);*/ 
     // Commit the edits! 
     editor.commit(); 

     SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0); 
/*  SharedPreferences.Editor editor = prefs.edit(); 
     return editor.commit();*/ 

     showResults(); 
    } 

    //...other code 
} 
+0

是什麼問題?你究竟在哪裏遇到問題? – thedan

+0

我有一個工作完美的程序,給了我兩個值 - 分數和百分比。我的問題是如何實現SharedPreference高分表到以前的工作程序。你可以在上面的代碼中看到我的SP代碼,但它並不是在接近編譯的地方。我正在尋找關於如何完成高分的實現的指導。 – Matt

+0

當在StackOverflow上提出問題時,你會得到很少答案,這個問題的意思是「這是一些代碼,告訴我如何解決它。」如果編輯問題以包含你想要做的事情,那麼你的代碼會做什麼,而不是像「爲什麼返回null?」這樣的*特定*問題。而不是「爲什麼這不起作用?」,以及一些有意義的錯誤輸出(如果適用)(來自logcat或編譯器輸出的堆棧跟蹤),您將獲得更多答案,因爲其他人會知道要找什麼試圖找出你首先需要幫助的東西。請編輯問題並修復:) –

回答

2

的一點是,你不明白SharedPreference的使用。對於這個高分的東西,你應該使用SQLite數據庫或文本文件。

請閱讀指南http://developer.android.com/guide/topics/data/data-storage.html以更好地理解Android中不同類型的持久性方法。你應該用你所說的三列(rank(int),score(long)和percentage(int))創建一個表格,並做一個小的CRUD來讓你的高分運行良好。您將不得不瞭解如何使用SQLiteOpenHelper並創建自己的表來執行表創建過程。然後,創建你的模型類來管理數據。

因此,如果您在閱讀developer.android.com指南後仍有疑問,請在Google中搜索SQLite教程。

+0

我試圖實現高分表時,似乎總是會得到與我有數據不同的答案。許多人說使用SQLite數據庫,許多人說SharedPreferences。無論如何,謝謝你的幫助。 – Matt

1

它看起來像你的問題得到了很好的回答,但我只是要拋出這個角度(你知道的越多!對吧?)。

您可能會發現使用在線排行榜系統更容易,而不是在本地維護一個。它可以爲您節省很多工作,讓您玩家可以輕鬆在全球範圍內競爭。一些選項是Swarm(又名SwarmConnect),ScoreloopPapaya。他們三人都提供了一種讓全球排行榜正常運行的方法,儘管我認爲Swarm的系統可能是開箱即用的最快最簡單的方式。

乾杯!