如何使用共享首选项正确保存

时间:2016-02-21 18:27:52

标签: android android-intent

所以我有一个基本的应用程序。包括3项活动。 A,B& C. A是主菜单,其中包含名为“新游戏”,“加载游戏”的按钮。 B包含3个名为“Easy”,“Hard”和“Medium”的按钮。 C包含实际游戏。当用户在A中按下“新游戏”时,它发送一个启动B的意图。当用户点击easy,medium或hard时,它会发送一个意图以及一些信息来启动C.当用户点击“继续”时在A中,它创建了一个启动C的意图并传递一个布尔值(参见下面的onStart();)。

我需要保存游戏状态。我这样做是通过使用sharedPreferences。这是我如何构建我的保存/加载的概述。这是在C活动中:

public void saveData(){
    Log.d("saving","In the saveData() method");
    SharedPreferences prefFile = getSharedPreferences("brainData", Context.MODE_PRIVATE);
    SharedPreferences.Editor prefEditor = prefFile.edit();
//... my saving occurs here
prefEditor.apply();
}
public void loadData(){
        Log.d("saving","In the loadData() method");
        SharedPreferences prefFile = getSharedPreferences("brainData", Context.MODE_PRIVATE);
//reading from prefFile to load the data occurs here
}

public void onStart(){
        super.onStart();
        Log.d("saving", "On start method()");
        Bundle loaded = getIntent().getExtras();

        if(loaded.getBoolean("beingLoaded")){
            Log.d("saving","Data being loaded");
            loadData();
        }else{
            Log.d("saving","Data not being loaded");
            //New game is created here since no data found
        }

    }

public void onPause() {
    super.onPause();

        if(questionCounter < 10){
            Log.d("saving","saving via onPause()");
            saveData();
        }
}

在onPause();如果questionCounter低于10,它会保存。在每次用户得到正确的答案时,questionCounter会递增。在我的游戏中,总共有10个问题,因此在游戏结束10个问题后,不要在10个问题后保存它是有意义的。

基本上,当我测试我的应用程序时,我点击新游戏,选择我的难度并玩,直到我回答4个问题,我按回来,我被带到活动A(B和C没有历史:真实的清单)。然后按'继续',它不加载。我在continue按钮中设置了一个小测试条件,如果找不到保存数据,则显示toast。吐司会显示出来。当onPause被调用时,为什么我明显保存。甚至我的Log.d消息也会显示出来,为什么我无法继续?

0 个答案:

没有答案