所以我有一个基本的应用程序。包括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消息也会显示出来,为什么我无法继续?