LibGdx数据与ArrayList持久存在

时间:2015-10-04 18:43:44

标签: java android libgdx

我在LibGdx和Android编程方面仍然是新手......

我正在尝试创建一个用于在我的应用程序中存储数据的类 这个类看起来像这个

package com.mygdx.hanoi.util;

import java.util.Map;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Preferences;

public class DataPersister2 {

    public Preferences getOrCreatePreferences(String prefName){
        return Gdx.app.getPreferences(prefName + ".prefs");
    }
    public Map getPreferencesData(Preferences prefName){
        return (Map) prefName.get(); //.get(key);
    }
    public void clearPreferences(Preferences prefName){
        prefName.clear();
    }
    public void insertPreferences(Preferences prefName, Map data){
        prefName.put(data);
        prefName.flush();
    }
}

问题是,当我尝试使用该类创建首选项并向其中添加ArrayList时,它始终表示首选项为null

DataPersister2 hs = new DataPersister2();
        Preferences hScore = hs.getOrCreatePreferences("highScores");
        hs.clearPreferences(hScore);

        // dummy test score data
        ArrayList<String[]> hsFreeMode = new ArrayList<String[]>();  // declare apa yang mau ditaruh sini, biar ga error di kemudian method
        hsFreeMode.add(new String[] {"luki", "5000"});
        hsFreeMode.add(new String[] {"laras", "3900"});

        ArrayList hsMoveMode = new ArrayList();
        hsMoveMode.add(new String[] {"cika", "6000"});
        hsMoveMode.add(new String[] {"cikoo", "1000"});

        Map hsMap = new HashMap();
        hsMap.put("freeMode", hsFreeMode);
        hsMap.put("moveMode", hsMoveMode);

        //hs.insertPreferences("highScores", hsMap);
        hs.insertPreferences(hScore, hsMap);

        // print out the data
        Map data = hs.getPreferencesData(hScore);
        Gdx.app.log("data print", "the free mode value is " + (String[]) data.get("freeMode"));
        Gdx.app.log("Array List", "the arraylist contains" + hsFreeMode.get(0)[0]);

每当我尝试从该类登录时(在&#39;数据打印&#39;日志中)它总是说null 但是如果我直接从ArrayList(在&#39;阵列列表&#39;日志中)记录它,则值会出现..

让我更奇怪的是,如果我在将地图值添加到首选项之前更改地图值,请执行以下操作:

Map hsMap = new HashMap();
    hsMap.put("freeMode", "luki");
    hsMap.put("moveMode", "laras");

    //hs.insertPreferences("highScores", hsMap);
    hs.insertPreferences(hScore, hsMap);

并记录如下数据:

Gdx.app.log("data print", "the free mode value is " + data.get("freeMode"));

显示的数据...... 所以我现在感到困惑,并且无法弄清楚(还)我的问题在哪里..

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:2)

由于libgdx文档Preferences仅支持字符串原始类型,因此您不能只将数组放入首选项中。在使用例如JSON

获取数据之后,您需要在放入和反序列化之前对其进行序列化
    //adding to the preferences:

    hsMap.put("freeMode", json.toJson( hsFreeMode ) );


    //and then:

    Gdx.app.log("data print", "the free mode value is " + ( (String[])json.fromJson(ArrayList.class, String[].class, (String)data.get("freeMode") ).get(0) )[0] );