有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用共享首选项保存永久数据?

我正在使用共享首选项为我的游戏制作高分脚本。我希望这些数据只保存在它安装的手机上。我做了以下操作,highscore显示并更新,但当我关闭应用程序并重新打开它时,它会重置

            if(finalScore > SharedPrefManager.getHighScore())
            SharedPrefManager.SetHighScore(finalScore);             
            SharedPrefManager.StoreToPref();

SharedPrefManager。爪哇:

package com.divergent.thumbler;

import 安卓.content.Context;
import 安卓.content.SharedPreferences;

// all methods are static , so we can call from any where in the code
//all member variables are private, so that we can save load with our own fun only
public class SharedPrefManager {
//this is your shared preference file name, in which we will save data
public static final String MY_EMP_PREFS = "MySharedPref";  

//saving the context, so that we can call all 
//shared pref methods from non activity classes. 
//because getSharedPreferences required the context.
//but in activity class we can call without this context
private static Context     mContext; 

// will get user input in below variables, then will store in to shared pref
private static int         HighScore             = 0;

public static void Init(Context context)
{
    mContext         = context;
}
public static void LoadFromPref()
{
    SharedPreferences settings     = mContext.getSharedPreferences(MY_EMP_PREFS, 0);
    // Note here the 2nd parameter 0 is the default parameter for private access,
    //Operating mode. Use 0 or MODE_PRIVATE for the default operation,
    HighScore = settings.getInt("HighScore", HighScore);

}
public static void StoreToPref()
{
    // get the existing preference file
    SharedPreferences settings = mContext.getSharedPreferences(MY_EMP_PREFS, 0); 
    //need an editor to edit and save values
    SharedPreferences.Editor editor = settings.edit();

    editor.putInt("HighScore", HighScore); // Age is the key and mAge is holding the value

    //final step to commit (save)the changes in to the shared pref
    editor.commit(); 
}

public static void DeleteSingleEntryFromPref(String keyName)
{
    SharedPreferences settings = mContext.getSharedPreferences(MY_EMP_PREFS, 0); 
    //need an editor to edit and save values
    SharedPreferences.Editor editor = settings.edit();
    editor.remove(keyName);
    editor.commit();
}

public static void DeleteAllEntriesFromPref()
{
    SharedPreferences settings = mContext.getSharedPreferences(MY_EMP_PREFS, 0); 
    //need an editor to edit and save values
    SharedPreferences.Editor editor = settings.edit();
    editor.clear();
    editor.commit();
}


public static void SetHighScore(int score)
{
    HighScore = score;
}

public static int getHighScore()
{
    return HighScore ;
}
}

共 (1) 个答案

  1. # 1 楼答案

    最好不要将敏感信息存储在sharedpreference中。所有拥有root权限的用户都可以查看并轻松编辑您的sharedpreference(如果未加密)。所以别忘了加密所有数据

    下面是需要存储在sharedpreference中的代码块

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("finalScore", yourscore);
    editor.commit();
    

    更新

    您正在设置为

    editor.putInt("HighScore", HighScore);
    

    HighScore = settings.getInt("Age",0);
    

    你应该使用相同的标签

    更新

    改变

    HighScore = settings.getInt("HighScore", HighScore);
    

    settings.getInt("HighScore", HighScore);