0

我想我现在有一个功能齐全的琐事游戏。在结果页面上的游戏结束时,它会显示分数(long)和百分比(int)。我现在想实现一个离线 SharePreferences highscores,其中输入了 3 个变量——rank(int)、score(long) 和 percent(int)。我试图首先用一个变量实现一个高分,然后再添加另外两个,但我似乎失败得很厉害。您可以在下面的我的活动中看到很多注释掉的代码,其中我正在尝试一些东西,并且许多其他尝试已经被删除。

这是我第一次尝试使用 SharedPreferences,所以我还没有完全掌握它。

结果.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
}
4

2 回答 2

2

关键是,您不了解 SharedPreference 的用法。对于这个高分的东西,你应该使用 SQLite 数据库或文本文件。

请阅读指南http://developer.android.com/guide/topics/data/data-storage.html以更好地了解 Android 中不同类型的持久化方法。

顺便说一句,您应该创建一个包含您所说的三列(rank(int)、score(long) 和 percent(int))的表,并做一些 CRUD 以使您的高分运行良好。您将必须了解如何使用 SQLiteOpenHelper 并创建自己的来执行表创建过程。然后,创建模型类来管理数据。

因此,如果您在阅读 developer.android.com 指南后仍有疑问,请在 Google 中搜索 SQLite 教程。

于 2012-12-17T20:04:31.763 回答
1

看起来你的问题得到了很好的回答,但我只是把它扔在那里以获得视角(你知道的越多!对吗?)。

您可能会发现使用在线排行榜系统比在本地维护一个更容易。它可以为您节省大量工作并为您带来好处,让玩家可以轻松地在全球范围内竞争。需要检查的一些选项是Swarm(又名 SwarmConnect)、ScoreloopPapaya。它们都提供了一种启动和运行全球排行榜的方法,尽管我认为 Swarm 的系统可能是开箱即用的最快和最容易设置的系统。

干杯!

于 2012-12-20T04:20:56.773 回答