0
我有一个小游戏,如果舞台打开或关闭,我需要存储一些乐谱信息和一些数据。我尝试了外部存储,内部存储和现在的共享首选项。 我的游戏只有一个活动和屏幕。一个屏幕有一个称为暂停的方法,当我们改变屏幕时,以及在onPause被调用时也会调用它。 我把保存方法放在每个屏幕上,但没有成功。 我的课GameImpl延伸活动。 所以我调用方法加载并将其保存为一个GameImpl实例,它与我拥有的每个类屏幕都是相同的。在课堂上Settigs.java的代码是下面两种方法加载和保存:SharedPreferences的getFloat没有保存好值
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();
}
现在我相信只是分数不显示propretly。声音没问题,它保存了状态,并且舞台/行星被正确运行并关闭,但是对于所有打开的阶段,得分为00.00。我不知道为什么..
谢谢!这解决了我的问题。 –
不客气。 –