【问题标题】:Array on a SharedPreference (FIFO) [closed]SharedPreference(FIFO)上的数组[关闭]
【发布时间】:2014-12-13 01:46:32
【问题描述】:

我想制作一个进度图,玩家可以在上面看到他最近的 5 场比赛历史得分。我的问题是我想将它保存在SharedpPeference 最新的 5 场比赛的得分上,然后将其转移到 Addition Array 中。会是这样的:

int[] x = { 1,2,3,4,5 };
int[] Addition = new int [x.length];

SharedPreference 可以吗?我如何以先进先出的方式制作它?因为我只需要最近5场比赛的比分?有人可以帮我解决这种逻辑吗?

【问题讨论】:

    标签: android arrays sharedpreferences storage


    【解决方案1】:

    您不能将Arrays 存储在SharedPreferences 中。

    您可以存储一个名为scores 的首选项,即String。然后,在其中,用int 存储每个游戏。

    SharedPreferences prefs = getSharedPrefs("score");
    

    然后,当您创建 Editor 以保存分数时,创建每个分数

    Editor ed = prefs.edit();
    ed.putInt("1", scoreOneVar);
    ed.commit;
    

    然后当有第六场比赛时,您需要删除第一场比赛或使用算法来获得最后 5 场。

    但是,在数据库或文件中存储/检索这些可能会更好/更容易。

    See the docs about storage options

    【讨论】:

    • 我是否有机会在共享偏好上做到这一点?因为 SQlite 更复杂。
    • 就像我上面展示的那样。将它们存储为单独的文件。我只添加了第一个分数,但是您可以使用 "2", scoreTwoVar 以相同的方式添加第二个分数。但是,一旦你尝试了一个 SQLite DB,它就真的没有那么复杂了。
    • 感谢先生的想法。你们真的帮助我。然后我需要学习 FiFO 的算法。
    • 从你目前所学的开始,然后做一些研究。如果在那之后您仍然遇到问题,请发布一个包含详细信息的新问题。
    • 先生,这个可以使用整数数组吗?
    【解决方案2】:

    使用这个:

    int x[] = { 1,2,3,4,5 };
    String willSave = "";
    for(int i=0 ; i<x.length ; i++){
        willSave += String.valueOf(x[i]) + ";";
    }
    
    saveString(getBaseContext(), "Values", "LastScores", willSave);
    
    // Checking the last cached values      
    String cachedValues = loadString(getBaseContext(), "Values", "LastScores");
    String splitted[] = cachedValues.split(";");
    
    int lastValues[] = new int[splitted.length];
    for(int i=0 ; i<splitted.length ; i++){
        lastValues[i] = Integer.parseInt(splitted[i]);
    }
    

    函数saveStringloadString

    public void saveString(Context c, String prefName, String key, String value){
        SharedPreferences settings = c.getSharedPreferences(prefName, 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString(key, value);
        editor.commit(); 
    }
    
    public String loadString(Context c, String prefName, String key){
        SharedPreferences settings = c.getSharedPreferences(prefName, 0);
        return new String(settings.getString(key, ""));
    }
    

    这段代码这样做:首先将您的int 数组转换为String,因为您无法将数组保存到sharedPrefs。然后将这个缓存的String 再次转换为int 数组。

    【讨论】:

    • 解释如何为什么你的代码应该解决这个问题比拍一堵代码更有益。
    • 我以为他/她只看代码就能理解。代码不多。无论如何,我添加了一点解释。
    • 这不仅仅是关于 OP 的理解,而是为了帮助未来的访问者遇到类似的问题。无论如何,如果有人不知道如何做某事,因此在这里问,那么很有可能解释代码如何/为什么工作对每个人都非常有益......甚至你自己。
    • 是的,你是对的,我理解并补充。如果您也想添加一些内容或解释不足以理解,您可以编辑先生。谢谢
    • 感谢您的帮助。我真的很感激先生。顺便假设变量scoreValue 保存我想要作为数组元素插入的分数的值。我在哪里以及如何做到这一点?
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多