我有一个小游戏,如果舞台打开或关闭,我需要存储一些乐谱信息和一些数据。我尝试使用externalstorage,内部存储,现在使用共享首选项。 我的游戏只有一个活动和屏幕。屏幕上有一个名为pause的方法,当我们改变屏幕时调用它,也在调用onPause时调用。 我把save方法放在每个屏幕上但没有成功。 我的GameImpl类扩展了Activity。 所以我调用了方法加载并保存了一个GameImpl实例,它在我所拥有的每个类屏幕中都是相同的。 Settigs.java类中的代码如下所示,加载和保存两种方法:
package com.spaceguardians;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class Settings {
public static int Open = 1;
public static int Locked = 0;
public static final int NR_STAGES = 8;
public static final float NOT_PLAYED = 0;
public static int planet1 = Open;
public static int planet2 = Locked;
public static int planet3 = Locked;
public static int planet4 = Locked;
public static int[] stagePlanet1 = { Open, Locked, Locked, Locked, Locked, Locked, Locked, Locked };
public static int[] stagePlanet2 = { Locked, Locked, Locked, Locked, Locked, Locked, Locked, Locked };
public static int[] stagePlanet3 = { Locked, Locked, Locked, Locked, Locked, Locked, Locked, Locked };
public static int[] stagePlanet4 = { Locked, Locked, Locked, Locked, Locked, Locked, Locked, Locked };
public static float[] stagePlanet1Score = { 00.00f, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED,
NOT_PLAYED, NOT_PLAYED, NOT_PLAYED };
public static float[] stagePlanet2Score = { NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED,
NOT_PLAYED, NOT_PLAYED, NOT_PLAYED };
public static float[] stagePlanet3Score = { NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED,
NOT_PLAYED, NOT_PLAYED, NOT_PLAYED };
public static float[] stagePlanet4Score = { NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED,
NOT_PLAYED, NOT_PLAYED, NOT_PLAYED };
public static boolean soundEnabled = true;
public static final String spaceGuardiansPref = "spaceGuardiansPref" ;
public static void load(Context context) {// FileIO files) {
SharedPreferences mySharedPreferences = context.getSharedPreferences(spaceGuardiansPref,
Activity.MODE_PRIVATE);
soundEnabled = mySharedPreferences.getBoolean("sound", true);
planet1 = mySharedPreferences.getInt("planet1", Open);
planet2 = mySharedPreferences.getInt("planet2", Locked);
planet3 = mySharedPreferences.getInt("planet3", Locked);
planet4 = mySharedPreferences.getInt("planet4", Locked);
for (int i = 0; i < Settings.NR_STAGES; i++) {
if (i == 0) {
Settings.stagePlanet1[i] = mySharedPreferences.getInt("stagePlanet1" + i, Open);
Settings.stagePlanet1Score[i] = mySharedPreferences.getFloat("stagePlanet1Score", 0);
} else {
Settings.stagePlanet1[i] = mySharedPreferences.getInt("stagePlanet1" + i, Locked);
Settings.stagePlanet1Score[i] = mySharedPreferences.getFloat("stagePlanet1Score", NOT_PLAYED);
}
Settings.stagePlanet2[i] = mySharedPreferences.getInt("stagePlanet2" + i, Locked);
Settings.stagePlanet2Score[i] = mySharedPreferences.getFloat("stagePlanet2Score", NOT_PLAYED);
Settings.stagePlanet3[i] = mySharedPreferences.getInt("stagePlanet3" + i, Locked);
Settings.stagePlanet3Score[i] = mySharedPreferences.getFloat("stagePlanet3Score", NOT_PLAYED);
Settings.stagePlanet4[i] = mySharedPreferences.getInt("stagePlanet4" + i, Locked);
Settings.stagePlanet4Score[i] = mySharedPreferences.getFloat("stagePlanet4Score", NOT_PLAYED);
}
}
public static void save(Context context) {// FileIO files) {
SharedPreferences mySharedPreferences = context.getSharedPreferences(spaceGuardiansPref,
Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putBoolean("sound", soundEnabled);
editor.putInt("planet1", planet1);
editor.putInt("planet2", planet2);
editor.putInt("planet3", planet3);
editor.putInt("planet4", planet4);
for (int i = 0; i < Settings.NR_STAGES; i++) {
editor.putInt("stagePlanet1" + i, Settings.stagePlanet1[i]);
editor.putFloat("stagePlanet1Score" + i, Settings.stagePlanet1Score[i]);
editor.putInt("stagePlanet2" + i, Settings.stagePlanet2[i]);
editor.putFloat("stagePlanet2Score" + i, Settings.stagePlanet2Score[i]);
editor.putInt("stagePlanet3" + i, Settings.stagePlanet3[i]);
editor.putFloat("stagePlanet3Score" + i, Settings.stagePlanet3Score[i]);
editor.putInt("stagePlanet4" + i, Settings.stagePlanet4[i]);
editor.putFloat("stagePlanet4Score" +i, Settings.stagePlanet4Score[i]);
}
editor.commit();
}
现在我相信只是得分并没有显示出来。声音没问题,它保存状态,阶段/行星正确选择和关闭,但所有开放阶段的得分为00.00。我不知道为什么..
答案 0 :(得分:1)
原因是您在保存时将i
附加到您的分数首选项名称:
editor.putFloat("stagePlanet4Score" +i, Settings.stagePlanet4Score[i]);
^^^
但是在加载分数时你没有添加它:
Settings.stagePlanet4Score[i] =
mySharedPreferences.getFloat("stagePlanet4Score", NOT_PLAYED);
^^