Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用共享首选项正确保存_Android_Android Intent - Fatal编程技术网

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

Android 如何使用共享首选项正确保存,android,android-intent,Android,Android Intent,所以我有一个基本的应用程序。由3个活动组成。A、 B&C.A是主菜单,其中有名为“新建游戏”、“加载游戏”的按钮。B包含3个按钮,分别名为“简单”、“硬”和“中等”。C包含实际的游戏。当用户在A中按“新建游戏”时,它会发送启动B的意图。当用户单击easy、medium或hard时,它会发送一个意图以及一些信息来启动C。当用户在A中单击“continue”时,它会创建一个启动C的意图并传递一个布尔值(请参见下面的onStart();) 我需要保存游戏状态。我使用SharedReferences来实

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

我需要保存游戏状态。我使用SharedReferences来实现这一点。这是我如何构建保存/加载的概述。这是在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();
        }
}
public void saveData(){
d(“saveData()方法中的saving“);
SharedReferences prefFile=GetSharedReferences(“brainData”,Context.MODE\u PRIVATE);
SharedReferences.Editor prefEditor=prefFile.edit();
//…我的储蓄发生在这里
prefEditor.apply();
}
公共void loadData(){
d(“保存”,“在loadData()方法中”);
SharedReferences prefFile=GetSharedReferences(“brainData”,Context.MODE\u PRIVATE);
//从prefFile读取以加载数据发生在此处
}
public void onStart(){
super.onStart();
Log.d(“保存”,“启动时方法()”);
Bundle-loaded=getIntent().getExtras();
if(loaded.getBoolean(“beingLoaded”)){
Log.d(“保存”、“加载数据”);
loadData();
}否则{
Log.d(“保存”、“未加载数据”);
//由于未找到任何数据,因此在此创建新游戏
}
}
公共无效暂停(){
super.onPause();
如果(问询台<10){
Log.d(“保存”,“通过onPause()保存”);
saveData();
}
}
在onPause()中;如果问号低于10,则保存。每当用户得到正确答案时,问号计数器就会递增。在我的游戏中,总共有10个问题,因此在10个问题之后不保存是有意义的,因为游戏在10个问题之后结束


基本上,当我测试我的应用程序时,我点击新游戏,选择我的难度并开始游戏,直到我回答了4个问题,我按下后退键,我被带到活动A(B和C没有历史记录:清单中为true)。然后我按下“继续”按钮,它不会加载。我在continue按钮中设置了一个小测试条件,如果没有找到保存数据,它将显示一个toast。祝酒词被展示出来。为什么在调用onPause时我显然正在保存数据。甚至我的Log.d消息也会显示出来,为什么我不能继续?

什么时候调用loadData()方法我在onStart()方法中调用它尝试在活动的onResume()中调用它尝试过了。不起作用。问题是,当我在活动A中单击continue时,它不会读取保存文件,因此会显示toast消息。我确定当用户从C存在时,文件正在保存,因为Log.d消息被适当地调用。您的代码实际上没有显示如何保存prefs。可能有什么问题