2014-01-11 61 views
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。我不知道为什么..

回答

1

的原因是,您要保存它时,追加i你的分数偏好名称:

editor.putFloat("stagePlanet4Score" +i, Settings.stagePlanet4Score[i]); 
            ^^^ 

但加载得分,当你不添加它:

Settings.stagePlanet4Score[i] = 
    mySharedPreferences.getFloat("stagePlanet4Score", NOT_PLAYED); 
                ^^ 
+0

谢谢!这解决了我的问题。 –

+0

不客气。 –